使用绝对定位和动态定位进行布局
[本文档仅供预览,在以后的发行版中可能会发生更改。包含的空白主题用作占位符。]
在应用程序中创建窗口后,必须决定如何在该窗口上对控件进行布局。 您还必须决定当用户调整窗口的大小时,窗口上的控件的行为方式。 这些是绝对定位和动态定位的问题。
在应用程序中创建窗口后,您会设置它的大小以及该窗口上的控件的大小。 您必须决定当窗口和控件的内容发生更改时它们的行为方式。 例如,如果您向窗口中添加了一个标签控件,您可以指定当文本被翻译成另一种语言时标签的行为方式。 这些是动态调整大小的问题。
布局类型
下面是您可以在 适用于 Visual Studio 的 WPF 设计器中创建的三种布局类型:
绝对
通过指定子元素相对于其父元素的准确位置来排列子元素。 例如,通过指定控件相对于面板的左坐标和上坐标可以在面板上排列控件。 调整父元素的大小时,子元素不会移动。 有关更多信息,请参见如何:根据绝对定位构造布局或演练:根据绝对定位构造布局。Dynamic
通过指定子元素相对于其父元素应该如何排列以及应该如何换行来排列子元素。 例如,您可以在面板上排列控件并指定它们应水平换行。 如果父元素缩小,子元素将移到下一行。 如果父元素扩大,子元素将移到上一行。 有关更多信息,请参见如何:构造动态布局或演练:构造动态布局。数据驱动的动态
您将某个控件绑定到数据。 该控件中将填充这些数据,并且将自动设置行和列的样式以容纳数据。
只要可能,就最好使用动态布局。 动态布局是最灵活的,允许最终用户最大限度地控制他们的环境。 动态布局允许内容适应本地化和其他内容更改。 在以下情况下,应该保留绝对布局:当元素的精确且不变的定位很重要时,或者当只有一个子元素(如图像或图形)时。
备注
绝对布局和动态布局可以结合使用。例如,您的窗口可以整体上使用动态布局,但是窗口的一部分使用绝对定位。
备注
设置 UseLayoutRounding 属性,以指定何时将传递 Measure 和 Arrange 的过程中所计算的非整数像素值四舍五入为整数像素值。子控件会继承此属性。
面板
WPF 提供了许多支持绝对定位和动态定位的 Panel 控件。 可以通过将一个 Panel 控件添加为另一个的子控件来组合 Panel 控件。 您可以使用下列 Panel 控件在您的应用程序中定位元素:
Panel |
布局类型 |
说明 |
---|---|---|
Dynamic |
定义一个区域,在此区域内,您可以在行和列中定位子元素。 |
|
Dynamic |
定义一个区域,在此区域内,您可以在上、下、左、右各边缘排列和叠放子元素。 |
|
Dynamic |
自动按顺序排列子元素,在父容器的边缘处将内容移到下一行。 排序按照从上至下或从左至右的顺序进行,具体取决于方向是设置为水平还是垂直。 |
|
Dynamic |
自动将子元素排列成一行,可沿水平或垂直方向。 |
|
Dynamic |
自动将子元素排列在行和列中。 行和列是均匀分布的。 如果元素无法容纳在一个单元格中,那么它会被截断。 |
|
绝对 |
定义一个区域,在此区域内,您可以使用坐标显式定位子元素。 |
控件
WPF 提供了支持数据驱动的动态定位的多个控件。 这些控件可以绑定到数据,并且自动调整大小以容纳数据。 您可以使用下列控件在您的应用程序中动态显示数据:
控件 |
布局类型 |
说明 |
---|---|---|
数据驱动的动态 |
显示数据项列表。 |
|
数据驱动的动态 |
在列中为列表视图控件显示数据项。 |
动态调整大小
在动态调整大小中,您将控件配置为自动展开或收缩以容纳其内容。 例如,如果您将标签控件的大小设置为容纳一种语言的文本,但是该文本被翻译成了另一种语言,您可以设置标签自动调整大小以容纳新的文本。 动态定位通过在控件的大小发生更改时自动调整控件的位置来支持动态调整大小。
下面是您可以设置以帮助创建动态布局的属性:
属性 |
值 |
适用于 |
注释 |
---|---|---|---|
double、Auto、* |
窗口、控件、网格列 |
使用自动和星号调整大小以最大限度地提高灵活性。 有关更多信息,请参见下一节。 * 仅适用于网格列。 |
|
double、Auto、* |
窗口、控件、网格行 |
使用自动和星号调整大小以最大限度地提高灵活性。 有关更多信息,请参见下一节。 * 仅适用于网格行。 |
|
double |
窗口、控件、网格列 |
设置为 0 以最大限度地提高灵活性。 |
|
double |
窗口、控件、网格行 |
设置为 0 以最大限度地提高灵活性。 |
|
double、Infinity |
窗口、控件、网格列 |
设置为 Infinity 以最大限度地提高灵活性。 |
|
double、Infinity |
窗口、控件、网格行 |
设置为 Infinity 以最大限度地提高灵活性。 |
|
窗口 |
设置为 CanResize 以最大限度地提高灵活性。 这允许用户调整窗口的大小。 |
||
窗口 |
设置为 WidthAndHeight 以最大限度地提高灵活性。 这允许窗口在其内容扩展时自动调整窗口本身的大小。 |
自动和星号调整大小
自动调整大小用于允许控件容纳它们的内容,即使内容更改大小也是如此。 星号调整大小用于根据加权比例分配网格的行和列之间的可用空间。 在可扩展应用程序标记语言 (XAML) 中,星号值用 *(或 n*)表示。 例如,如果您的网格有 4 列,您可以按照如下方式设置各列的宽度:
第 1 列 |
Auto |
该列的大小将根据其内容而设置。 |
第 2 列 |
* |
计算完“自动”列之后,该列获得其余宽度的一部分。 第 2 列的宽度将为第 4 列的一半。 |
第 3 列 |
Auto |
该列的大小将根据其内容而设置。 |
第 4 列 |
2* |
计算完“自动”列之后,该列获得其余宽度的一部分。 第 4 列的宽度将为第 2 列的两倍。 |
有关更多信息,请参见 Star。
请参见
概念
WPF and Silverlight Designer 概述