WPF布局之Grid


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…的單元格分布

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM