一、Canvas
这个容器能够对元素做准确的定位,但同时也是其创建的页面不够灵活。
二、StackPanel
最大的优点是:他会顺序的对他的子元素进行排列显示。(没有任何附加属性)
要注意的是:他有两个属性:Orientation和FlowDirection从而可以设置子元素的排列显示形式
Orientation的值设为Horizontal则为水平排列,设为Vertical则垂直排列。
FlowDirection的值设为RightToLeft,则从右向左排列。设为LeftToRight,则从左向右排列。
三、WrapPanel
类似于StackPanel,具有StackPanel的属性和功能(也具有FlowDirection属性的设置)。
同时,它还具有向我们通常用的windows资源管理器一样,会随着窗口的大小,从而将子元素进行合理的分行显示,而不会出现因为窗口变小从而是一些子元素无法显示。
WrapPanel布局面板将各个控件从左至右按照行或列的顺序罗列,当长度或高度不够是就会自动调整进行换行,后续排序按照从上至下或从右至左的顺序进行。
Orientation——根据内容自动换行。当 Horizontal选项看上去类似于Windows资源管理器的缩略图视图:元素是从左向右排列的,然后自上至下自动换行。Vertical 选项看上去类似于Windows资源管理器的列表视图:元素是从上向下排列的,然后从左至右自动换行。
ItemHeight——所有子元素都一致的高度。每个子元素填充高度的方式取决于它的VerticalAlignment属性、Height属性等。任何比ItemHeight高的元素都将被截断。
ItemWidth——所有子元素都一致的宽度。每个子元素填充高度的方式取决于它的VerticalAlignment属性、Width属性等。任何比ItemWidth高的元素都将被截断。
四、DockPanel
与Cavas相似也是从容器的边缘来定位子元素的位置。不同的是,它只能让子元素简简单单的停靠在容器边缘,然后拉伸来填充整个panel
<Window x:Class="WPFDock.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<DockPanel>
<Button DockPanel.Dock="Top" Background="Aqua">1(Top)</Button>
<Button DockPanel.Dock="Left" Background="Green">2(Left)</Button>
<Button DockPanel.Dock="Right" Background="Yellow">3(Right)</Button>
<Button DockPanel.Dock="Bottom" Background="Blue">4(Bottom)</Button>
<Button Background="Orange">5</Button>
</DockPanel>
</Window>
五、Grid
1、通过<Grid.RowDefinitions>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition Height="2*"></RowDefinition>
<RowDefinition Height="3*"></RowDefinition>
<RowDefinition Height="4*"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>类似于以上的语法来为Grid添加行和列。
2、每个单元格可以设置为空,也可以放多个元素。
3、RowSpan和ColumnSpan来设置单元格的跨行跨列属性。
4、行和列的高度和宽度的设置:auto:自动尺寸监控
(像素):绝对尺寸
(带“*”的数字)比例尺寸
六、 GridSplitter
将GridSplitter放到一个一个单元格中可以通过鼠标改变该单元格的大小:
它的两个属性:设置为VerticalAlignment="Bottom" HorizontalAlignment="Stretch"时,就会在单元格的下方显示可以改变单元格的高度。
VerticalAlignment="Stretch" HorizontalAlignment="Right" 就会改变单元格的宽度。
值得注意的是:水平方向和垂直方向有一个的值必须设为Stretch,否则的话是一个小点,就无法实现其功能。
GridSplitter必须有一个显示的Width和Height这样才能看到,并且启到作用。
七、共享行和列的尺寸。
ColumnDefinition 和RowDefinition都有一个共同的属性:SharedSizeGroup 它的值是一个自定义的值,这样被标记的具有同样值的行和列就会一直有相同的呈现形式,其中的一个改变,另一个也会改变。
但值得注意的是在使用这个属性的时候,要将grid的共享开启: <Grid Name="parentGrid" Grid.IsSharedSizeScope="True">....</Grid>
八、 处理内容溢出
1、剪切(clipping)
大部分面板都有一个Boolean的属性ClipToBounds并且它们的值都设为true,所以只要是溢出面板的都会被剪切掉
只有 Canvas面板的这个属性可以设置,并且ClipToBounds的值默认是false。
2、滚屏(scrolling)
只需将所有的元素(或面板)放入到一个<ScrollViewer >.....</ScrollViewer>内即可。他有属性:VerticalScrollBarVisibility(默认值Visible)和HorizontalScrollBarVisibility(默认值Auto)可以设置他们的值:Visible,Hidden,Auto,Disabled
3、缩放(scaling)
将内容放置到<Viewbox>...</Viewbox>之内即可实现缩放。
属性Stretch:值
Uniform(默认):显示整个元素到窗体的空间上,会随着窗体的大小而自动缩放,(但是某个方向上可能因为比例不合适而无法填充剩余空间)
UniformToFill:在保存外观比例同时缩放子元素来完全填充viewbox内的空间(但是某个方向上可能因为比例不合适而要截断部分显示)
None:不进行缩放,与不用viewbox没什么区别。
Fill:显示子元素到viewbox中,各个方向都要拉伸以填充所有空间。
属性StretchDirection值
Both(默认)扩大或缩小内容。DownOnly:如果合适缩小内容。如果内容足够小,viewbox保持当前内容大小不变。UpOnly:如果合适扩大内容,如果内容足够大,Viewbox保持当前内容大小不变。