Grid 用於建立表格佈局。

基本行和列定義

<Grid>
  <!-- Define 3 columns with width of 100 -->
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="100"/>
    <ColumnDefinition Width="100"/>
    <ColumnDefinition Width="100"/>
  </Grid.ColumnDefinitions>
  <!-- Define 3 rows with height of 50 -->
  <Grid.RowDefinitions>
    <RowDefinition Height="50"/>
    <RowDefinition Height="50"/>
    <RowDefinition Height="50"/>
  </Grid.RowDefinitions>
  <!-- This is placed at the top left (first row, first column) -->
  <Button 
      Grid.Column="0"
      Grid.Row="0"
      Content="Top Left"/>
  <!-- This is placed at the top left (first row, second column) -->
  <Button 
      Grid.Column="1"
      Grid.Row="0"
      Content="Top Center"/>
  <!-- This is placed at the center (second row, second column) -->
  <Button 
      Grid.Column="1"
      Grid.Row="1"
      Content="Center"/>
  <!-- This is placed at the bottom right (third row, third column) -->
  <Button 
      Grid.Column="2"
      Grid.Row="2"
      Content="Bottom Right"/>
</Grid>

注意:以下所有示例僅使用列,但也適用於行

自動大小定義

可以使用 Auto 作為寬度/高度來定義列和行。自動尺寸將佔用顯示其內容所需的空間,而不再需要。
自動大小的定義可以與固定大小的定義一起使用。

<Grid>
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="Auto"/>
    <ColumnDefinition Width="Auto"/>
    <ColumnDefinition Width="50"/>
  </Grid.ColumnDefinitions>
  <!-- This column won't take much space -->
  <Button Grid.Column="0" Content="Small"/>
  <!-- This column will take much more space -->
  <Button Grid.Column="1" Content="This text will be very long."/>
  <!-- This column will take exactly 50 px -->
  <Button Grid.Column="2" Content="This text will be cut"/>
</Grid>

簡單的星號定義

可以使用*定義列和行作為其寬度/高度。星號行/列將佔用儘可能多的空間,無論其內容如何。
星號定義可以與固定和自動大小的定義一起使用。星號是預設值,因此可以省略列寬或行高。

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="50"/>
    </Grid.ColumnDefinitions>
    <!-- This column will be as wide as it can -->
    <Button Grid.Column="0" Content="Small"/>
    <!-- This column will take exactly 50 px -->
    <Button Grid.Column="2" Content="This text will be cut"/>
</Grid>

比例星大小的定義

除了恆星佔據儘可能多的空間這一事實外,恆星定義也是相互成正比的。如果沒有提到其他內容,則每個星形定義將佔用當前網格中其他星號的空間。

但是,可以通過簡單地向其新增乘數來定義不同定義的大小之間的比率。因此,定義為 2*的列將是定義為*的列的兩倍寬。單個單位的寬度是通過將可用空間除以乘數的總和來計算的(如果有,則將其計為 1)。
因此,將 3 列定義為*2**的網格將顯示為 1 / 4,1 / 2,1 / 4。
一個有 2 列定義為 2*3*將呈現 2 / 5,3 / 5。

如果集合中有自動或固定定義,則首先計算這些定義,然後星形定義將佔用剩餘空間。

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="2*"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <!-- This column will be as wide as the third column -->
    <Button Grid.Column="0" Content="Small"/>
    <!-- This column will be twice as wide as the rest -->
    <Button Grid.Column="1" Content="This text will be very long."/>
    <!-- This column will be as wide as the first column -->
    <Button Grid.Column="2" Content="This text will may be cut"/>
</Grid>

列/行跨度

通過設定它的 Row / ColumnSpan,可以使控制範圍超出它的單元格。值集是行數/列數 th

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="2*"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <!-- This control will streach across most of the grid -->
    <Button Grid.Column="0" Grid.ColumnSpan="2" Content="Small"/>
    <Button Grid.Column="2" Content="This text will may be cut"/>
</Grid>