WPF布局元素有如下几个:
特点
行列的宽高单位
计算机图形设计的标注单位是像素(Pixel),因此Grid的宽高单位就是像素,除了像素作为单位外还可以接受英寸(Inch)、里面(CM)和点(Point)。
对于Grid的行高列宽,我们可以设置三类值:
比例值像素计算方式:解析器会把所以的比例值得数值加起来作为分母,把每个比例值得数值作为分子,在用这个分数乘以未被占用得像素数,得到得结果就是分配给这个比列值得最终像素。例如:一个总高度为200px的Grid,它包含5行,其中两行采用绝对值50px,其它三行分别为1*,2*,2*。则剩下为100px,其三行分配的像素数分别为20px,40px,40px。
案列
<Window x:Class="Grid_01.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Grid_01"
mc:Ignorable="d"
Title="留言板" Height="240" Width="440">
<Grid Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="20" />
<RowDefinition Height="4"/>
<RowDefinition Height="*"/>
<RowDefinition Height="4"/>
<RowDefinition Height="25"/>
Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="4"/>
<ColumnDefinition Width="80"/>
Grid.ColumnDefinitions>
<TextBlock Text="请选择您的部门并留言:" Grid.Column="0" Grid.Row="0" VerticalAlignment="Center"/>
<ComboBox Grid.Column="1" Grid.Row="0" Grid.ColumnSpan="4"/>
<TextBox Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="5" BorderBrush="Black"/>
<Button Content="提交" Grid.Column="2" Grid.Row="4"/>
<Button Content="清楚" Grid.Column="4" Grid.Row="4"/>
Grid>
Window>
StackPanel可以把内部元素在纵向或横向紧凑排列,当排在前面的元素抽掉之后,排在它后面的元素会整体向前移动、补占原有元素的空间。
应用场景
属性
Orientation 决定内部元素是横向累积还是纵向累积
HorizontalAlignment 决定内部元素水平方向的排列方式
VerticalAlignment 决定内部元素竖直方向的排列方式
Canvas布局就像在画布上画控件一样,Winform开发时外面通过设置控件的Left和Top等属性来确定控件在窗体上的位置,而WPF的控件没有Left和Top等属性,因此当控件放在Canvas会添加位置信息。
应用场景
WrapPanel内部采用的是流式布局,可以使用Orientation属性来控制流延伸的方向,使用HorizontalAlignment和VerticalAlignment 两个属性控制内部控件的对齐。在流延伸的方向上,WrapPanel会排列尽可能多的控件,排不下的控件将会新起一行或一列继续排列。通常在上位机卡控页面会结合UniformGrid进行使用。
案例
<Window x:Class="UniformGrid_04.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:UniformGrid_04"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<UniformGrid Columns="2" Rows="10" Margin="50,20,0,0">
<WrapPanel>
<TextBlock Text="面积:" />
<TextBox Width="120" Height="30" />
WrapPanel>
<WrapPanel>
<TextBlock Text="面积:" />
<TextBox Width="120" Height="30" />
WrapPanel>
<WrapPanel>
<TextBlock Text="面积:" />
<TextBox Width="120" Height="30" />
WrapPanel>
<WrapPanel>
<TextBlock Text="面积:" />
<TextBox Width="120" Height="30" />
WrapPanel>
<WrapPanel>
<TextBlock Text="面积:" />
<TextBox Width="120" Height="30" />
WrapPanel>
<WrapPanel>
<TextBlock Text="面积:" />
<TextBox Width="120" Height="30" />
WrapPanel>
<WrapPanel>
<TextBlock Text="面积:" />
<TextBox Width="120" Height="30" />
WrapPanel>
<WrapPanel>
<TextBlock Text="面积:" />
<TextBox Width="120" Height="30" />
WrapPanel>
<WrapPanel>
<TextBlock Text="面积:" />
<TextBox Width="120" Height="30" />
WrapPanel>
<WrapPanel>
<TextBlock Text="面积:" />
<TextBox Width="120" Height="30" />
WrapPanel>
<WrapPanel>
<TextBlock Text="面积:" />
<TextBox Width="120" Height="30" />
WrapPanel>
<WrapPanel>
<TextBlock Text="面积:" />
<TextBox Width="120" Height="30" />
WrapPanel>
<WrapPanel>
<TextBlock Text="面积:" />
<TextBox Width="120" Height="30" />
WrapPanel>
<WrapPanel>
<TextBlock Text="面积:" />
<TextBox Width="120" Height="30" />
WrapPanel>
<WrapPanel>
<TextBlock Text="面积:" />
<TextBox Width="120" Height="30" />
WrapPanel>
<WrapPanel>
<TextBlock Text="面积:" />
<TextBox Width="120" Height="30" />
WrapPanel>
UniformGrid>
Window>