1.Grid
Grid是以表格形式組織控件的一種布局方式,與Java AWT中的GridLayout類似,但區別在於
WPF中的Grid的每一個單元格中可以放置多個控件,但控件可能會層疊在一起
WPF中的Grid支持單元格的合並,類似於HTML中的table td中的rowspan和colspan
Grid中的行和列可以自定義高度(Height)和寬度(Width)
在設置高度和寬度時可以采用兩種寫法:
1)Height=”60”:不加“星號”表示固定的高度
2)Height=”60*”:加“星號”表示“加權”的高度,在調整窗體大小時,此高度或寬度會按窗體大小改變的比例進行縮
如代碼:
<Grid> <Grid.RowDefinitions> <RowDefinition Height="60" /> <RowDefinition Height="202*" /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition/> </Grid.ColumnDefinitions> <Button Grid.Column="0" Grid.Row="0" Height="30" VerticalAlignment="Top">ButtonA</Button> <Button Grid.Column="0" Grid.Row="0" Height="30" VerticalAlignment="Bottom">ButtonB</Button> <Button Grid.Column="1" Grid.Row="0">ButtonC</Button> <Button Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="2">ButtonD</Button> </Grid>
生成的效果為:類似與table中的布局模式
2.GridSplit
GridSplit控件結合Grid控件實現類似於Windows應用程序中SplitContainer的功能,即分區域且可拖動大小
如下面的例子,代碼:
<Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="88*" /> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="190*" /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="172*" /> <RowDefinition Height="Auto" /> <RowDefinition Height="90*" /> </Grid.RowDefinitions> <Button Content="ButtonA" Margin="3" Grid.Row="0" Grid.Column="0" Grid.RowSpan="3" /> <Button Content="ButtonB" Margin="3" Grid.Row="0" Grid.Column="2" /> <Button Content="ButtonC" Margin="3" Grid.Row="2" Grid.Column="2" /> <GridSplitter Width="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Row="0" Grid.Column="1" Grid.RowSpan="3"></GridSplitter> <GridSplitter Height="3" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Grid.Row="1" Grid.Column="2"></GridSplitter> </Grid>
實現的效果如下圖所示,紅色標記的區域可進行左右,上下拖動來更改各區域的大小。
代碼說明:首先在Grid中定義一個3行3列的區域,ButtonA放置於0行0列,高度占據3行,ButtonB放置於0行2列,ButtonC放置於2行2列,然后分別在第1列和第1行2列放置一個GridSplit用於分割各區域。如下圖所示。
3.UniformGrid
UniformGrid 控件為控件提供了一種簡化的網格布局。當控件添加到 UniformGrid 時,它們會排列在一個網格模式中,該網格模式會自動調整以使控件之間的距離保持均勻。單元格的數目將進行調整,以適應控件的數目。例如,如果四個控件添加到 UniformGrid 中,它們將安排在包含四個單元格的網格中。
如代碼:
<UniformGrid> <Button Content="ButtonA" /> <Button Content="ButtonB" /> <Button Content="ButtonC" /> <Button Content="ButtonD" /> <Button Content="ButtonE" /> <Button Content="ButtonF" /> <Button Content="ButtonG" /> <Button Content="ButtonH" /> <Button Content="ButtonI" /> <Button Content="ButtonJ" /> </UniformGrid>
效果圖:
在上圖中,雖然button個數為10個,但是仍然會生成4*4個單元格,隨着窗體大小變化,各Button的大小保持一致,位置不變。
在使用UniformGrid的時候:
各單元格的大小完全相同
單元格的數量取決於放入的控件的數量,且單元格一定是行、列數相同的,即1*1、2*2、3*3、4*4…的單元格分布