【WPF学习】第五章 理解WPF的布局

  在Windows开发人员设计用户界面的方式上,WPF布局模型是一个重大改进。在WPF问世以前,Windows开发人员使用刻板的基于坐标的布局将控件放到正确位置。在WPF中,这种方式虽然可行,但已经极少使用。大多数应用程序将使用相似Web的流(flow)布局;在使用流布局模型时,控件能够扩大,并将其余控件挤到其余位置。开发人员能建立与现实分辨率和窗口大小无关的、在不一样的显示器上正确缩放的用户界面;当窗口内容发生变化时,界面可调整自身,而且能够自如地处理语言的切换。要利用该系统的优点,首先须要进一步理解WPF布局模型的基本概念和假设。工具

1、 WPF布局原则布局

  WPF窗口只能包含单个元素。为在WPF窗口中放置多个元素并建立更贴近实用的用户界面,须要在窗口上放置一个容器,而后再这个容器中添加其余元素。设计

  在WPF中,布局由您实用的容器来肯定。尽管有多个容器可供选择,但“理想的”WPF窗口须要遵循如下几条重要原则:blog

  • 不该显示设定元素(如控件)的尺寸。元素应当能够改变尺寸以适合它们的内容。例如,当添加更多的文本时按钮应当可以扩展。可经过设置最大和最小尺寸来限制能够接受的控件尺寸范围。
  • 不该使用屏幕坐标指定元素的位置。元素应当由它们的容器根据它们的尺寸、顺序以及(可选的)其余特定与具体布局容器的信息进行排列。若是须要在元素之间添加空白空间,可以使用Margin属性。
  • 布局容器的子元素“共享”可用的空间。若是空间容许,布局容器会根据每一个元素的内容尽量为元素设置更合理得尺寸。它们还会向一个或多个子元素分配多余的空间。
  • 可嵌套的布局容器。典型的用户界面使用Grid面板做为开始,Grid面板是WPF中功能最强大的容器,Grid面板可包含其余布局容器,包含的这些容器以最小的分组排列元素,好比带有标题的文本框、列表框中的项、工具栏上的图标以及一列按钮等。

  尽管对于这几条原则而言也有一些例外,但它们反映了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控件,尽管这有点违反直觉)。接下来文章会分别介绍核心容器信息。

相关文章
相关标签/搜索