在Windows开发人员设计用户界面的方式上,WPF布局模型是一个重大改进。在WPF问世以前,Windows开发人员使用刻板的基于坐标的布局将控件放到正确位置。在WPF中,这种方式虽然可行,但已经极少使用。大多数应用程序将使用相似Web的流(flow)布局;在使用流布局模型时,控件能够扩大,并将其余控件挤到其余位置。开发人员能建立与现实分辨率和窗口大小无关的、在不一样的显示器上正确缩放的用户界面;当窗口内容发生变化时,界面可调整自身,而且能够自如地处理语言的切换。要利用该系统的优点,首先须要进一步理解WPF布局模型的基本概念和假设。工具
1、 WPF布局原则布局
WPF窗口只能包含单个元素。为在WPF窗口中放置多个元素并建立更贴近实用的用户界面,须要在窗口上放置一个容器,而后再这个容器中添加其余元素。设计
在WPF中,布局由您实用的容器来肯定。尽管有多个容器可供选择,但“理想的”WPF窗口须要遵循如下几条重要原则:blog
尽管对于这几条原则而言也有一些例外,但它们反映了WPF的整体设计目标。换句话说,若是建立WPF应用程序时,循环了这些原则,将会建立出更好的、更灵活的用户界面。若是不遵循这些原则,最终将获得不是很适合WPF的而且难以维护的用户界面。 继承
2、布局过程开发
WPF布局包括两个阶段:测量(measure)阶段和排列(arrange)阶段。在测量阶段,容器遍历全部子元素,并询问子元素它们所指望的尺寸。在排列阶段,容器在合适的位置放置子元素。容器
固然,元素未必总能等到最合适的尺寸——有事容器没有足够大的空间以适应所含的元素。在这种状况下,容器为了适应可视化区域的尺寸,就必须剪裁不能知足要求的元素。在后面能够看到,一般可经过设置最小窗口尺寸来避免这种状况。可视化
3、布局容器扩展
全部WPF布局容器都是派生自System.Windows.Controls.Panel抽象类的面板。以下图所示:stylus
Panel类添加了少许成员,包括三个公有属性,以下表所示:
表 Panel的公有属性
就Panel基类自己而言没有什么特别的,但他是其它更多特殊类的起点。WPF提供了大量可用于安排布局的继承自Panel的类。下表列出了其中几个最基本的类。与全部WPF控件和大多数可视化元素同样,这些类位于System.Windows.Controls名称空间里。
表 核心布局面板
除这些核心容器外,还有几个更专业的面板,在各类控件中均可能遇到它们。这些容器包括专门用于包含特定控件子元素的面板——如TabPanel面板(在TabPanel面板中包含多个选项卡)、ToolbarPanel面板(工具栏中的多个按钮)以及ToolbarOverflowPanel面板(Toolbar控件的溢出菜单中的多个命令)。还有VirtualizingStackPanel面板,数据绑定列表空间使用该面板以大幅下降开销;还有InkCanvas控件,该控件和Canvas控件相似,但该控件支持处理平板电脑(TabletPC)上的手写笔(stylus)输入(例如,根据选择的模式,InkCanvas控件,尽管这有点违反直觉)。接下来文章会分别介绍核心容器信息。