一、基础知识
1、所有WPF布局容器都派生自System.Windows.Controls.Panel抽象类的面板;
2、WPF种核心布局面板有StackPanel(栈面板)、WrapPanel(环绕面板)、DockPanel(停靠面板)、Grid(网格面板)、UniformGrid(均匀面板)、Canvas(画布)
二、实例
1、StackPanel(栈面板):特点是在水平或垂直的堆栈中放置元素,每个元素各占一行或者一列,这个布局容器通常用于大的、复杂的窗口中的一些小区域
默认情况下,StackPanel面板自上而下的顺序排列元素,使每个元素的高度适合它的内容
1.1垂直布局
<Grid> <StackPanel> <Button Name="btn1" Content="Button1" /> <Button Name="btn2" Content="Button2" /> <TextBox Name="txtDemo" Background="Red" /> <CheckBox Name="cbDemo" Content="男" /> <RadioButton Name="rbMan" Content="男" GroupName="rbSex" /> <RadioButton Name="rbWomen" Content="女" GroupName="rbSex" /> </StackPanel> </Grid>
1.2水平布局
<StackPanel Orientation="Horizontal">
2、WrapPanel(环绕面板):WrapPanel面板在可能的空间中,以一次一行或一列的方式布局控件,在水平方向上,WrapPanel面板从左向右放置条目,然后在随后的行中放置元素,在垂直方向上,WrapPanel面板自上而下的列种放置元素,并使用附加的列放置剩余的条目。
通过Orientation属性来设置
<WrapPanel Orientation="Vertical"> <Button Name="btn1" Content="btn1" Margin="4"/> <Button Name="btn2" Content="btn2" Margin="4"/> <Button Name="btn3" Content="btn3" Margin="4"/> <Button Name="btn4" Content="btn4" Margin="4"/> <Button Name="btn5" Content="btn5" Margin="4"/> </WrapPanel>
3、DockPanel(停靠面板):根据容器的整个边界调整元素,默认情况下后添加的元素只能使用剩余的空间,最后一个元素可以占据所有剩余空间
<Grid> <DockPanel LastChildFill="false"> <Button Name="btn1" Content="Dock.Top" DockPanel.Dock="Top" /> <Button Name="btn2" Content="Dock.Left" DockPanel.Dock="Left" /> <Button Name="btn3" Content="Dock.Right" DockPanel.Dock="Right" /> <Button Name="btn4" Content="Dock.Bottom" DockPanel.Dock="Bottom" /> <Button Name="btn5" Content="Dock" /> </DockPanel> </Grid>
默认情况下最后一个元素填充剩余空间
4、Grid面板:通过使用对象填充Grid.RowDefinitions和Grid.ColumnDefinations集合来创建网格和行 可以用ShowGridLines="True"来显示网格
<Grid> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition /> <ColumnDefinition /> <ColumnDefinition /> </Grid.ColumnDefinitions> <Button Name="btn1" Grid.Row="0" Grid.Column="0" Content="第一行第一列" /> <Button Name="btn2" Grid.Row="0" Grid.Column="1" Grid.ColumnSpan="2" Background="Green" Content="第一行第二、三列" /> <Button Name="btn3" Grid.Row="1" Grid.RowSpan="2" Grid.Column="0" Background="Gray" Content="第二、三行第一列" /> <Grid Grid.Row="1" Grid.Column="1" ShowGridLines="True"> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition /> <ColumnDefinition /> </Grid.ColumnDefinitions> <TextBox Name="txtDemo" Grid.Row="1" Grid.Column="1" Background="Azure"/> </Grid> </Grid>
三、混合实例
3.1类似连连看布局
源码下载:布局连连看.zip
3.2中国八大名菜系列布局
源码下载:PanelDemo.zip