在任意用户界面设置中,有一半的工作时以富有吸引力、灵活实用的方式组织内容。但真正的挑战是确保界面布局能恰到好处地适应窗口尺寸。
wpf用不同的容器(container)安排布局。每个容器有各自的布局逻辑----有些容器以堆栈方式布局元素,另一些容器在网络中不可见的格中排
序元素,等等。在wpf中非常抵制基子坐标的布局,而是注重创建灵活的布局,使布局能够适应内容的变化、不同的语言以及各人种窗口的尺寸。
移动到 wpf的许多开发人员会觉得新的布局系统令自己倍感惊奇 --- 这也是开发人员面临的第一个挑战。
wpf布局原则
wpf窗口只能包含单个元素。为wpf窗口放置多个元素并创建更贴近实用的用户界面,需要在窗口上放置一个容器,然后在这个容器中添加其他元素。
注意:造成这一个限制的原因是 window 类继承自ContentControl类。
在WPF中,布局由您使用的容器来定。尽管有很多个容器可供选择,但“理想的”wpf窗口需要遵循以下重要原则:
1,不应显示设定元素的尺寸。元素应当可以改变尺寸以适合他们的内容。例如,当添加更多的文本按钮应当能够扩展。可通过设置最大和最小尺寸来限制
可以接受的控件尺寸范围。
2,不应使用屏幕坐标指定元素的位置。元素应当由它们的容器根据它们的尺寸、顺序以及(可选的)其它特定于具体布局容器的信息进行排列。如果需要在
元素之间添加空白空间,可使用Margin属性。
3,布局容器的子元素“共享”可用的空间。如果空间允许,布局容器会根据每个元素的内容尽可能为元素设置更合理的尺寸。它们还会向一个或子元素分配多余的空间。
4,可嵌套的布局容器。典型的用户界面使用grid面板作为开始,grid面板是wpf中功能最强大的容器,grid面板可包含其他布局容器,包含的这些容器以更小
的分组排序元素,不如带有标题的文本框、列表框中的项、工具栏上的图标以及一列按钮等。
总结: 尽管对于这几条原则而言也有一些例外,但它们反映了wpf的总体设计目标。换句话说,如果创建wpf应用程序时遵循了这些原则,将会创建出更好的、
更灵活的用户界面。如果不遵循这些原则,最终将得到不是很适合wpf的并且难以维护用户界面。
名称 | 说明 |
Backgrond | 该属性是用于为面板背景着色的画刷。如果想接收鼠标事件,就必须将属性设置为非空值(如果想接收鼠标事件,又不希望显示固定颜色的背景,那么只需要将背景色设置为透明即可)。 |
Children | 该属性是用于在面板中存储的条目集合。这是第一个条目---换句话说,这些条目自身也可以包含更多条目 |
IsItemsHost | 该属性是一个布尔值,如果面板用于显示与ItemsControl控件关联的项(例如,TreeView控件中的节点或列表项),该属性值为true.在大多数情况下,甚至不需要知道列表控件使用后台面板管理它所包含的条目的布局。但如果希望创建自定义的列表,以不同放置子元素(例如,以平铺方式显示图像的ListBox控件),该细节就变得很重要了。 |
核心布局面板
名称 | 说明 |
StackPanel | 在水平或垂直的堆栈中放置元素。这个布局容器常用于更大、更复杂窗口中的一些区域 |
WrapPanel | 在一系列可换行的行中放置元素,在水平向上,WraPanel面板从左向右放置条目,然后在随后的行中的放置元素。在垂直方向上,WrapPanel面板在自上而下的列中放置元素,并使用附加的列放置剩余的条目。 |
DockPanel | 根据容器的整个边界调整元素 |
Grid | 根据不可见的表格在行和列中排序元素,这是最灵活、最常见的元素之一 |
UniformGrid | 在不可见但是强制所有单元格具有相同尺寸的表中放置元素,这个布局容器不常用 |
Canvas | 使用固定坐标绝对定位元素。这个布局容器与传统Windows窗口应用程序最相似,但没有提供锚定或停靠功能。因此,对于尺寸可变的窗口,该布局容器不是合适的选择。如果选择的话,需要另外做一些工作。 |