原文:快速构建Windows 8风格应用17-布局控件

本篇博文主要介绍三种常用的布局控件:Canvas、Grid、StackPanel。

Panel类是开发Windows 8 Store应用中一个重要类,它在Windows 8 Store应用布局系统中扮演非常重要角色。

Panel可以承载多个子元素,面板类可以把子元素存放在栈中、或网格里面、或把子元素停靠在其边缘等。

Panel类自身是一个抽象类,下面是Panel类的层次结构:

Windows 8 Store应用中包含的三个标准布局控件:Canvas(通常在常规布局中,尽量不要考虑使用Canvas,不过在某些特殊情况下,使用Canvas还是非常方便的)、Grid(它是大多数常规布局的首选)、StackPanel(可能是最简单的一种面板类型)。

Canvas

要在Canvas中定位元素,需要提供相对于左上角的水平坐标和竖直坐标。

代码实现效果:

其中Left和Top属性表示元素的左上角与Canvas左上角的相对位置。

一般来说Canvas比较适合把元素布局在任何位置上,因此这样更适合于矢量图形编程而不是控件布局编程。

同样我们C#代码中控制控件元素在Canvas中布局。

我们注意到xaml代码中并没有设置button的相对于Canvas的Left和Top属性,这里通过C#代码进行设置。

SetValue方法定义在DependencyObject类里面,LeftProperty和TopProperty是Canvas中DependencyProperty类型的静态字段。

两种布局设置方式最后实现效果是一样。

Canvas还有一个附加属性是ZIndex,我们可以使用ZIndex来更改默认元素的层次。

我们可以在一个或多个字元素中设置Canvas.ZIndex附加属性,可以将这个属性理解为屏幕中想出的Z轴,z值较大的元素会覆盖z值较小的元素。如果两个元素具有相同的Canvas.ZIndex值,那么会根据他们在Children集合中德顺序来分层。

注意:虽然Canvas.ZIndex附加属性定义在Canvas类中,但是它实际上适用于任何类型的面板。另外如果我们自定义一个面板类,其实我们并不需要处理Z值,布局系统会自动处理。

Grid

Grid是我们选择面板类时默认选择,它非常灵活易用。

Grid让我们可以想起HTML中的表格(Table),但两者是有差异的:Grid不像HTML的表格,它并不是做格式化的工作,只用于布局,并且也没有标题或者内置单元格分割线等概念。

Grid具有一定数量的行和列;行的高度可以不一样,列的高度也可以不一样。Grid中的子元素可以占据一个特定的行和列,也可以占据多行和多列。虽然Grid功能非常强大,但也是需要付出代价的,我们在使用Grid的时候需要知道需要多少行和列来容纳所有的子元素。

注意:嵌套Grid是十分常见,但不要滥用,特别是在程序会经常重新生成布局的情况下。过于复杂的嵌套会导致布局非常混乱。

实现效果:

Grid定义了RowDefinitions和ColumnDefinitions两个属性,它们分别是RowDefinition和ColumnDefinition对象的集合。这些对象定义了每行的高度和每列的宽度,我们通常可以有三种选择:

1)  使用单词“Auto”;

2)  固定的像素;

3)  星号,或者数字后加星号;

通过Grid的附加属性Grid.Row和Grid.Column来指明子元素所在的行和列。

StackPanel

StactPanel可以理解成已“栈”的形式将其子元素自顶向下或自左向右排列,并且子元素彼此之间不互相重叠。

默认情况下子元素是自顶向下排列的。

我们也可以设置子元素是自左向右排列。

我们可以通过StackPanel的Orientation属性来改变子元素排列的方向。

当然我们也可以通过C#代码来设置子元素的排列方向。

快速构建Windows 8风格应用17-布局控件的更多相关文章

  1. 快速构建Windows 8风格应用18-基础控件I

    原文:快速构建Windows 8风格应用18-基础控件I 本篇博文主要介绍Windows 8风格应用开发中常用的几种基础控件. ProgressRing: ProgressRing控件常见的效果图: ...

  2. 快速构建Windows 8风格应用4-FlipView数据控件

    原文:快速构建Windows 8风格应用4-FlipView数据控件 本篇博文主要介绍为什么使用FlipView控件.什么是FlipView控件.如何使用FlipView控件和FlipView控件最佳 ...

  3. 快速构建Windows 8风格应用5-ListView数据控件

    原文:快速构建Windows 8风格应用5-ListView数据控件 本篇博文主要介绍什么是ListView数据控件.如何构建ListView数据控件. 什么是ListView数据控件? 1)  Li ...

  4. 快速构建Windows 8风格应用6-GridView数据控件

    原文:快速构建Windows 8风格应用6-GridView数据控件 本篇博文主要介绍什么是GridView数据控件.如何构建常用的GridView数据呈现样式. 什么是GridView数据控件? G ...

  5. 快速构建Windows 8风格应用19-基础控件II

    原文:快速构建Windows 8风格应用19-基础控件II 本篇博文接着上篇博文<快速构建Windows 8风格应用18-基础控件I>介绍开发Windows 8风格应用中常用控件. Sli ...

  6. 快速构建Windows 8风格应用9-竖直视图

    原文:快速构建Windows 8风格应用9-竖直视图 本篇博文主要介绍竖直视图概览.关于竖直视图设计.如何构建竖直视图 竖直视图概览 Windows 8为了支持旋转的设备提供了竖屏视图,我们开发的应用 ...

  7. 快速构建Windows 8风格应用7-页面视图概览

    原文:快速构建Windows 8风格应用7-页面视图概览 本篇博文主要介绍Windows 8风格应用中包含哪些视图.Visual Studio 2012和模拟器中如何开发和调试不同的页面视图.页面视图 ...

  8. 快速构建Windows 8风格应用8-贴靠视图

    原文:快速构建Windows 8风格应用8-贴靠视图 本篇博文主要介绍如何切换出贴靠视图.关于贴靠视图的设计.关于贴靠视图的应用程序栏和如何实现贴靠视图. 如何切换出贴靠视图 第一步:水平方向全屏视图 ...

  9. 快速构建Windows 8风格应用2-创建调试应用

    原文:快速构建Windows 8风格应用2-创建调试应用 本篇博文主要介绍的是创建应用时可以选择哪些模版,生成默认的Windows 8风格应用解决方案中含哪些文件,最后是如何调试Windows 8风格 ...

随机推荐

  1. tomcat配置sqlserver数据库

    1. 首先确保Tomcat安装文件夹中的\common\lib(对于Tomcat5.5)或者是\lib(Tomcat6.0)文件夹中已包括JDBC连接数据库所必须的三个.jar文件(msbase.ja ...

  2. Freemarker详细解释

    A概念 最经常使用的概念 1. scalars:存储单值 字符串:简单文本由单或双引號括起来. 数字:直接使用数值. 日期:通常从数据模型获得 布尔值:true或false,通常在<#if -& ...

  3. 1第一个Android应用程序

    第一个程序从 Hello World 開始?? 或许C语言学习是从这開始的,可是书上不是这么開始的,或许起点就决定了高度?? 一.新建安卓项目 (1)选择安卓项目 (2)随便建个名字的项目,默认下一步 ...

  4. 批处理命令 For循环命令具体解释!

    批处理for命令具体解释FOR这条命令基本上都被用来处理文本,但还有其它一些好用的功能!看看他的基本格式(这里我引用的是批处理中的格式,直接在命令行仅仅须要一个%号)FOR 參数 %%变量名 IN ( ...

  5. UML对象图和包图

    UML九已经介绍过的基本图,然后,我们再来看看对象图和包图.  一.对象图 谈到对象.我们不得不说一下对象.对象(Object)是对象类的实例(Instance),用于模型化特定的实体.对象是唯一的. ...

  6. tortoise svn无法识别subversion check向下代码来解决

    使用eclipse小工具subversion check代码后,tortoise svnclient(版本号1.8.8)无法识别,不显示svn图标. 根据每个试验后的线上不实际的解决方案.试过的方法: ...

  7. Nyoj 一笔画问题(图论)

    描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下来. 规定,所有的边都只能画一次,不能重复画.   输入 第一行只有一个正整数N(N&l ...

  8. 大数据系列修炼-Scala课程11

    接着昨天的list,也是学习集合的相关知识 ListBuffer.ArrayBuffer.Queue.stack相关操作 1.ListBuffer.ArrayBuffer代码实现:ListBuffer ...

  9. 大数据系列修炼-Scala课程05

    Scala多重继承.构造器的执行顺序.AOP实现 多重继承的trait实现:Scala中接口可以继承具体的类,trait接口可以实现多重继承,并且某个类也可以继承特定的类,在继承后面可以混入,接口的实 ...

  10. C# 使用 Code Snippet 简化 Coding

    在开发的项目的时候,你是否经常遇到需要重复编写一些类似的代码,比如是否经常会使用 for.foreach ? 在编写这两个循环语句的时候,你是一个字符一个字符敲还是使用 Visual Studio 提 ...