【Win10应用开发】相对布局(RelativePanel)

外面的雨下得很大,老周就决定雨下漫笔了。

今天咱们说一个新控件——RelativePanel。本质上,它就是一个面板,面板干啥用的?面板就是一个容器,里面可以放其他对象,就像我们小时候玩的七巧板一样,估计现在的孩子不玩了,现在的孩子除了游戏机就是游戏机,人生如戏啊,不对,应该叫人生如儿戏恰当一些。

RelativePanel控件公开了一堆附加属性,既然是附加了,当然就是在子元素上使用的了。这些属性我不再一一去说,相当没意思。以后也不要问我哪个类在哪个命名空间、哪个类有哪些属性之类的没水平问题,我不回答这些问题,VS那么强大你都不会利用。

RelativePanel是通过相对位置来布局的,也就是说,不管面板的大小如何改变,元素之间或者元素与面板之间的相对位置不会改变。大体上可以分为两类:一类是子元素相对于面板的位置;另一类是子元素与其他子元素之间的位置。

纸上谈X的话我就不多说了,老周理论水平比较差。还是动手干活充实一点。

先看下面这个例子:

        <RelativePanel>
            <Button
                Content="起飞"
                RelativePanel.AlignRightWithPanel="True"
                RelativePanel.AlignBottomWithPanel="True"/>
        </RelativePanel>

这是一个典型的是相对于面板进行定位的,AlignRightWithPanel设置为true表示按钮对齐到面板的右侧;AlignBottomWithPanel属性值为true表示按钮对齐到面板的底部。综合起来就是按钮停靠在面板的右下角。

我们来看看结果。

现在你可以调整窗口的大小。

然后你会发现,“起飞”按钮始终处于面板的右下角。

下面再看一例。

        <RelativePanel>
            <Rectangle Width="200" Height="200" Fill="Blue" RelativePanel.AlignLeftWithPanel="True" RelativePanel.AlignVerticalCenterWithPanel="True" Name="r1"/>
            <Rectangle Width="200" Height="100" Fill="Green" RelativePanel.RightOf="r1" RelativePanel.AlignTopWith="r1" />
        </RelativePanel>

这个例子中,面板里面有两个矩形。第一个矩形是相对于面板进行布局的,它对齐面板到左侧,并且在垂直方向上居中对齐。

第二个矩形是相对于第一个矩形来定位,RightOf属性指定一个参考元素,当前元素就位于属性指定的元素的右边。在XAML文档中,直接引用目标元素的名字就可以了。正因为如此,需要为第一个矩形取个名字r1。AlignTopWith属性指定,这个矩形的对齐是相对于第一个矩形而言的,对齐到第一个矩形的顶部。

运行后的结果如下:

下面给大家看一个更猛的例子。

        <RelativePanel>
            <!-- 中 -->
            <Ellipse Fill="Red" Name="ec" Width="300" Height="300" RelativePanel.AlignHorizontalCenterWithPanel="True" RelativePanel.AlignVerticalCenterWithPanel="True"/>
            <!-- 左 -->
            <Ellipse Fill="Yellow" Width="50" Height="50" RelativePanel.LeftOf="ec" RelativePanel.AlignTopWith="ec"/>
            <Ellipse Fill="Brown" Width="50" Height="50" RelativePanel.LeftOf="ec" RelativePanel.AlignVerticalCenterWith="ec"/>
            <Ellipse Fill="Crimson" Width="50" Height="50" RelativePanel.LeftOf="ec" RelativePanel.AlignBottomWith="ec"/>
            <!-- 上 -->
            <Ellipse Fill="DarkSlateBlue" Width="50" Height="50" RelativePanel.Above="ec" RelativePanel.AlignLeftWith="ec"/>
            <Ellipse Fill="CornflowerBlue" Width="50" Height="50" RelativePanel.Above="ec" RelativePanel.AlignHorizontalCenterWith="ec"/>
            <Ellipse Fill="Linen" Width="50" Height="50" RelativePanel.Above="ec" RelativePanel.AlignRightWith="ec"/>
            <!-- 右 -->
            <Ellipse Fill="#FF24B831" Width="50" Height="50" RelativePanel.RightOf="ec" RelativePanel.AlignTopWith="ec"/>
            <Ellipse Fill="MediumSlateBlue" Width="50" Height="50" RelativePanel.RightOf="ec" RelativePanel.AlignVerticalCenterWith="ec"/>
            <Ellipse Width="50" Height="50" Fill="LawnGreen" RelativePanel.RightOf="ec" RelativePanel.AlignBottomWith="ec"/>
            <!-- 下 -->
            <Ellipse Width="50" Height="50" Fill="#FF7B30C7" RelativePanel.Below="ec" RelativePanel.AlignLeftWith="ec"/>
            <Ellipse Fill="#FFF05D26" Height="50" Width="50" RelativePanel.Below="ec" RelativePanel.AlignHorizontalCenterWith="ec"/>
            <Ellipse Width="50" Height="50" Fill="#FFBF1D7D" RelativePanel.Below="ec" RelativePanel.AlignRightWith="ec"/>
        </RelativePanel>

面板中间位置是一个名为ec的圆,在ec周围有十二个小圆,积极团结在ec周围。在定位时,先确定小圆相对于大圆的位置,比如RelativePanel.Below表示该小圆位于大圆的下方。接着确定小圆相对于大圆的对齐方式,如RelativePanel.AlignBottomWith设置小圆在垂直方向上对齐到大圆的底部。

得到的结果如下图所示。

从上面这几个例子,大家可以发现,RelativePanel使用起来并不复杂,你只要把握各个附加属性的使用即可。

示例源码下载:http://files.cnblogs.com/files/tcjiaan/relativeLayoutSample.zip

时间: 2024-12-29 11:38:36

【Win10应用开发】相对布局(RelativePanel)的相关文章

atitit.软件开发GUI 布局管理优缺点总结java swing wpf web html c++ qt php asp.net winform

atitit.软件开发GUI 布局管理优缺点总结java swing wpf web html c++ qt php asp.net winform 1. Absoluti 布局(经常使用) 1 2. Flow 布局(不经常使用) 1 3. BorderLayout (不经常使用) 1 4. BoxLayout( html默认布局) 2 5. CardLayout (tab 布局) 2 6. GridLayout 3 7. GridBagLayout 3 8. Fixed 定位(不经常使用) 3

Mobile Web 开发,布局必须用 table,这要写进手则

直到今天,JavaScript 的世界仍然洪荒. 比如说 Angular 的 ngView 是不能玩儿嵌套的. 试了 angular-ui-router,未果,因和 $locationProvider & ngRoute 的设置冲突.弃之. 是.没有克服不了的技术困难.如果有,绕过去就是了.所以,还是没有. 没有解决不了的技术问题.如果有,让它不是问题就是了.所以,还是没有. -------------------------- 何时冒出一个叫什么猎豹的浏览器?用的是 IE 的内核.IE 下,读

Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App

安装VS2015 Update2的过程是非常曲折的.还好经过不懈的努力,终于折腾成功了. 如果开发Cordova项目的话,推荐大家用一下ionic这个框架,效果还不错.对于Cordova.PhoneGap.ionic.AngularJS这些框架或库的关系,我个人理解是这样,PhoneGap是一个商业项目,用来实现HTML5式的跨平台开发,后来Adobe公司将其中的核心代码开源,就是Cordova,Cordova只负责实现JavaScript调用原生代码的功能,是一个壳,而壳里具体用什么样式,在H

Win10 UWP开发系列:解决Win10不同版本的Style差异导致的兼容性问题

原文:Win10 UWP开发系列:解决Win10不同版本的Style差异导致的兼容性问题 最近在开发一个项目时,遇到了一个奇怪的问题,项目依赖的最低版本是10586,目标版本是14393,开发完毕发布到商店后,很多用户报无法正常加载页面.经查,有问题的都是Win10 10586版本. 我上篇博客中写到的自定义的AppBar控件,也存在这个问题,10586会报错. 为此特意下载了10586的SDK调试.错误显示,一个样式找不到,名为ListViewItemBackground.因为开发的时候是基于

Win10 UWP开发系列——开源控件库:UWPCommunityToolkit

原文:Win10 UWP开发系列--开源控件库:UWPCommunityToolkit 在开发应用的过程中,不可避免的会使用第三方类库.之前用过一个WinRTXamlToolkit.UWP,现在微软官方发布了一个新的开源控件库—— UWPCommunityToolkit 项目代码托管在Github上:https://github.com/Microsoft/UWPCommunityToolkit 包括以下几个类库: 都可以很方便的从Nuget上安装. NuGet Package Name des

【Win10 应用开发】人脸识别

原文:[Win10 应用开发]人脸识别 可能你会认为人脸识别用起来会很复杂,老周当初也这么想,但通过实际操作后,我发现非然. 经过微软封装的东西,向来都是复杂问题简单化,只要用得舒心,代码越少越好,用最少的代码做最多的事情,此为大师境界也. 好,屁话不说,先介绍一下如何完成人脸识别(或者叫人脸检测,随你怎么翻译,反正知道是怎么一回事就行).核心的类是FaceDetector,不要问我这个类在哪里,自己打开对象浏览器搜索. 第一步,访问静态属性IsSupported,看看当前平台是不是支持人脸识别

【Win10 应用开发】解决VS 2015 RC不能调试手机应用的问题

原文:[Win10 应用开发]解决VS 2015 RC不能调试手机应用的问题 VS2015 RC已发布,当然这个版本还不能用于实际生产中,如果你没有测试环境,就等正式版出来,RC都来了,RTM就不远了. 如果你也像老周一样,已经在耍RC版了,你可能会遇到下面问题: 安装Win 10 SDK后,在手机模拟器上调试应用程序时会失败,错误如下: 狄胖胖经常跟元芳说,解决问题一定要顺藤摸瓜,抽丝剥茧.那么咱们就看看错误信息,既然说是找不到这个文件,那我们就打开这个目录,看看里面有什么. 打开以下目录:

【Win10 应用开发】集成语音命令

原文:[Win10 应用开发]集成语音命令 记得老周以前在写WP8应用开发的文章时,曾经写过语音命令集成的文章,后来8.1的时候“小娜”问世,但考虑到其变化不大,故老周没有补写相应的文章. 今天,老周打算补一下Win 10通用应用开发中,有关语音命令集成相关的内容.虽然还是一脉相承,大的变化没有,不过Win10 sdk在语音命令定义文件中添加了新内容,而且现在不仅能在手机应用中加入语音集成,在面向PC和板子的应用中也能如愿,因为应用程序已经通用. 同理,在开始之前,老周仍然先给大家讲个故事. 话

【Win10 应用开发】从前台应用触发后台任务

原文:[Win10 应用开发]从前台应用触发后台任务 有关后台任务的使用,估计大伙伴们不会陌生,而且老周曾经在某文中也简单讲述过.说到后台任务,老周想到了一个问题:有人问,后台任务一定要独立写到一个Runtime组件中吗,能不能写到主项目的代码中? 老周严重地回答你:是可以的,在配置清单文件中,你只需要在Extension元素中指定Executable为主项目的.exe文件即可. <Extension Category="windows.backgroundTasks" Entr

【Win10 应用开发】OCR识别

原文:[Win10 应用开发]OCR识别 OCR,即Optical Character Recognition,光学字符识别.以下介绍来自搜索: OCR(Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗.亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程:即,针对印刷体字符,采用光学的方式将纸质文档中的文字转换成为黑白点阵的图像文件,并通过识别软件将图像中的文字转换成文本格式,供文字处理软