Layout 布局
WPF 附带以下通用面板布局控件:
Grid(网格)
按开发人员指定的行和列排列内容,不用固定大小和位置。最强大的内置布局控件
1 <Grid> 2 <Grid.RowDefinitions> 3 <RowDefinition /> 4 <RowDefinition /> 5 <RowDefinition /> 6 </Grid.RowDefinitions> 7 <Grid.ColumnDefinitions> 8 <ColumnDefinition /> 9 <ColumnDefinition /> 10 <ColumnDefinition /> 11 </Grid.ColumnDefinitions> 12 <Button Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2">A</Button> 13 <Button Grid.Row="0" Grid.Column="2">C</Button> 14 <Button Grid.Row="1" Grid.Column="0" Grid.RowSpan="2">D</Button> 15 <Button Grid.Row="1" Grid.Column="1">E</Button> 16 <Button Grid.Row="1" Grid.Column="2">F</Button> 17 <Button Grid.Row="2" Grid.Column="1">H</Button> 18 <Button Grid.Row="2" Grid.Column="2">I</Button> 19 </Grid>
列宽和行高您可以使用ColumnDefinition和
RowDefinition元素配置Grid中的列宽和行高。
共有三种调整大小选项:固定、自动和比例。
固定:设置固定数字
自动:Auto,根据内容自动高速大小
比例:*,2.5*
UniformGrid(自动均分行或列的网格)
在每个单元格大小相同的网格中排列子项。
根据显示内容的需要生成相同行数和列数的网格来排列内容
StackPanel (堆栈面板)
将子控件横向排列或纵向排列,用于管理小规模局部布局
根据面板的 Orientation="Horizontal" 属性,决定方向是从上到下或从左到右排列内容(默认是:从上到下)
WrapPanel(换行面板)
控件布局方式同 StackPanel ,但在子控件空间不足时会自动换行排列控件。
在水平行中排列事物,直到下一个项目排不下,在这种情况下它换行到下一行。(根据窗口大小自动换行排列控件)
DockPanel(容器停靠面板)
将面板区域的整个边缘分配给每个子控件,用于简单的界面的粗略布局
根据每个内容“停靠”到的边缘排列内容,最后一个控件除外,它填充剩余区域(仅当属性:LastChildFill="True")
DockPanel非常适合创建基本用户界面的顶层结构。
Canvas(画布)
按位置和坐标排列内容,调整画布大小时不会自动重新排列。类似于WinForm窗口
不执行任何布局逻辑,将子控件放在你指定的位置,允许你完全控制布局过程。
默认情况下,面板没有自己的外观,它们存在唯一可见效果是它们如何高速子控件的大小和位置。但是,可以通过设置它们的背景 Background 属性使它们可见。
ScrollViewer 滚动查看器
ScrollViewer控件允许通过将超大内容放入可滚动区域来显示超大内容。
如果你想将多个元素放入一个可滚动的视图中,你可以将它们嵌套在一个面板中
<ScrollViewer HorizontalScrollBarVisibility="Auto"> <Ellipse Fill="Green" Height="1000" Width="2000" /> </ScrollViewer>
如果您有一个包含大量项目的大型可滚动区域,那么预先创建所有项目可能效率不高。您可以
通过仅在项目滚动到视图中时按需创建项目来显着提高性能。
如果您想控制滚动功能,您必须编写一个实现IScrollInfo 的用户界面元素。
IScrollInfo有 24 个成员,并且需要您完成ScrollViewer本来
可以为您完成的大部分工作。
*幸运的是,对于滚动列表的非常常见的场景,我们可以使用
VirtualizingStackPanel 提供的内置IScrollInfo实现。
VirtualizingStackPanel实现IScrollInfo以便它可以显示所有数据的滚动反馈,即使它只生成 UI
元素来表示当前可见的那些项目,“虚拟化”数据视图
Viewbox 视图框
Viewbox元素会自动缩放其内容以填充可用空间。
1 <Viewbox Stretch="Uniform"> 2 <Canvas Width="18" Height="18" VerticalAlignment="Center"> 3 <Ellipse Canvas.Left="1" Canvas.Top="1" Width="16" Height="16" 4 Fill="Yellow" Stroke="Black" /> 5 <Ellipse Canvas.Left="4.5" Canvas.Top="5" Width="2.5" Height="3" 6 Fill="Black" /> 7 <Ellipse Canvas.Left="5.2" Canvas.Top="5.8" Width="1" Height="1" 8 Fill="White" /> 9 <Ellipse Canvas.Left="11" Canvas.Top="5" Width="2.5" Height="3" 10 Fill="Black" /> 11 <Path Data="M 5,10 A 3,3 90 0 0 13,10" Stroke="red" /> 12 </Canvas> 13 </Viewbox>
Common Layout Properties 通用布局属性
Property(属性)
|
Usage(说明)
|
Width
|
指定固定宽度
|
Height
|
指定固定高度
|
MinWidth
|
最小允许宽度
|
MaxWidth
|
最大允许宽度
|
MinHeight
|
最小允许高度
|
MaxHeight
|
最大允许高度
|
HorizontalAlignment
|
水平对齐
|
VerticalAlignment
|
垂直对齐
|
Margin
|
元素外部的边距
|
Padding
|
元素内部的边距 |
Visibility
|
元素的可见性 |
FlowDirection
|
文字方向
|
Panel.ZIndex
|
针对叠列元素显示的顺序(Grid 和 Canvas ,中同一位置可以叠积放置多个元素,类似于PS中画布分层) |
RenderTransform
|
渲染变换(不会重新布局,超出部分截除)
|
LayoutTransform
|
布局变换(会跟据变换内容大小,重新调整父控件大小)
|