WPF用于布局的面板主要有6个,StackPanel(栈面板)、WrapPanel(环绕面板)、DockPanel(停靠面板)、Canvas(画布)、Grid(网格面板)和UniformGrid(均布网格)。
1、StackPanel(栈面板)
可以将元素按顺序排列成一行或者一列,其特点是:
a、每个元素各占一行或者一列;
b、Orientation属性:Vertical(垂直)【默认】、Horizontal(水平)。默认情况下,水平排列时每个元素都与面板一样高;垂直排列时每个元素都与面板一样宽;
c、如果包含的元素超过了面板空间,它只会截断多出的内容。 元素的Margin属性用于使元素之间产生一定得间隔。
效果图:
2、WrapPanel(环绕面板)
将各个控件从左至右按照行或列的顺序罗列,当长度或高度不够时就会自动调整进行换行,Orientation属性控制是水平还是垂直排列。
效果图:
3、DockPanel(停靠面板)
对每个子元素进行排序,并将根据指定的边进行停靠,多个停靠在同侧的元素则按顺序排序。在DockPanel中,指定停靠边的控件,会根据定义的顺序占领边角,所有控件绝不会交叠。
注意:默认情况下,后添加的元素只能使用剩余空间,无论对DockPanel的最后一个子元素设置任何停靠值,该子元素都将始终填满剩余的空间。如果不希望最后一个元素填充剩余区域,可以将DockPanel属性LastChildFill设置为false,还必须为最后一个子元素显式指定停靠方向。
效果图:
4、Canvas(画布)
用于完全控制每个元素的精确位置。使用Canvas,必须指定一个子元素的位置(相对于画布),否则所有元素都将出现在画布的左上角;用Left、Right、Top和Bottom四个附加属性来调整位置。
注意:Canvas允许子元素的部分或全部超过其边界,默认不会裁剪子元素,同时可以使用负坐标,即溢出的内容会显示在Canvas外面,这是因为默认 ClipToBounds=”False”,因此画布不需要指定大小。如果想复制画布内容,将ClipToBounds设为true即可。
效果图:
5、Grid(网格面板)
顾名思义就是“网格”,以表格形式布局元素,对于整个面板上的元素进行布局,它的子控件被放在一个一个事先定义好的小格子里面,整齐配列。主要是在RowDefinitions和ColumnDefinitions属性中添加一定数量的RowDefinitions和 ColumnDefinitions元素,从而定义行数和列数。
注意:尽管Grid面板被设计成不可见的,但可将Grid.ShowGridLines属性设置为True,可以很清晰的看到网格的布局。
Grid面板支持以下三种设置尺寸的方式:
名称 | 说明 |
绝对设置尺寸方式 | 使用设备无关单位准确地设置尺寸,就是给一个实际的数字,但通常将此值指定为整数。这是最无用 的策略,因为这种策略不够灵活,难以适应内容大小和容器大小的改变,而且难以处理本地化。 |
自动设置尺寸方式 | 值为Auto,实际作用就是取实际控件所需的最小值,每行和每列的尺寸刚好满足需要,这是最有用 的尺寸设置方式。 |
按比例设置尺寸方式 | 按比例将空间分割到一组行和列中。这是对所有行和列的标准设置。通常值为*或N*,实际作用就是取尽可能大的值,当某一列或行被定义为*则是尽可能大,当出现多列或行被定义为*则是代表几者之间按比例方设置尺寸。 |
效果图:
6、UniformGrid(均布网格)
一种横向、纵向的网格分割都是均等的布局类型,故称为 " 均分布局 "。
特点如下:
a、 各个单元格的大小完全相同,宽与高分别相同;
b. 默认情况下,单元格的数量取决于放入的控件的数量,且单元格一定是行、列数相同,即 1X1、2X2 、3X3 等等的单元格分布;
3、UniformGrid 有两个属性,分别是:Columns 和 Rows ,它们是分别用来指定当前的最大列数和最大的行数,如果只设置了其中一个而不设置另外一个的话,那么没有设置的那个默认为 1;在设置的这两个属性的情况下,UniformGrid 不再会按照行、列数相同来分布,而是按照用户指定的 Columns 和 Rows 来分布。
效果图: