[Windows ストア アプリ][Grid] 行や列を連結する

<Grid>コントロールでは、行や列を連結して、1つのセルのように扱うことができます。

行を連結するにはGrid.RowSpanを、列を連結するにはGrid.ColumnSpanを使用します。
Grid.RowSpanは Grid.RowやGrid.Columnと一緒に使用します。

たとえば、Buttonコントロールを1行2列に置き、2行にまたがって配置したい場合には下記のようにします。

2行にまたがって配置する例

<Button Content="2行連結" Grid.Row="0" Grid.Column="1" Grid.RowSpan="2" />

また、Buttonコントロールを3行1列に置き、2列にまたがって配置したい場合には下記のようにします。

2列にまたがって配置する例

<Button Content="2列連結" Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" />

Grid全体のXAML例は下記の通りです。

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="100" />
        <RowDefinition Height="100" />
        <RowDefinition Height="100" />
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>

    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="200" />
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    
    <Button Content="2行連結" Grid.Row="0" Grid.Column="1" Grid.RowSpan="2"
            FontSize="50" Width="300" Height="200" Background="BlueViolet"/>
    <Button Content="2列連結" Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2"
            FontSize="50" Width="300" Height="200" Background="BlueViolet"/>
</Grid>

[Windows ストア アプリ][Grid] 行と列を定義する

Gridコントロールを使用するとGrid内のエリアを表のように行と列に分割し、各セル内にコントロールを配置することが可能になります。

行は<Grid.RowDefinitions>で定義します。
1行は<RowDefinition>で表し、3行作成する場合は<Grid.RowDefinitions>の中に<RowDefinition>を3つ記述します。

3行作成する例

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
    </Grid.RowDefinitions>
</Grid>

ただし、このままでは各行の高さは0となってしまうため、Height属性を使用して各行の高さを指定します。
Height属性には、数値、Auto、* のいずれかを指定することができます。
数値を指定すると、行高さは指定された数値の高さとなります。
Autoを指定すると、行高さはその行内に配置したコントロールの高さになります。
*をしていすると、行高さは、配置したGridの総高さから他の行の高さの総和を引いた高さになります。

3行作成し、それぞれの高さを100, 200, *とする場合は下記のようにします。

3行を作成し、それぞれの行高さを指定する例

<Grid.RowDefinitions>
    <RowDefinition Height="100"/>
    <RowDefinition Height="200" />
    <RowDefinition Height="*"/>
</Grid.RowDefinitions>

————————

列は<Grid.ColumnDefinitions>で定義します。
1列は <ColumnDefinition>で表し、3列作成する場合は<Grid.ColumnDefinitions>の中に<ColumnDefinition>を3つ記述します。

3列作成する例

<Grid.ColumnDefinitions>
    <ColumnDefinition />
    <ColumnDefinition />
    <ColumnDefinition />
</Grid.ColumnDefinitions>

ただし、このままでは各列の幅は0となってしまうため、Width属性を指定して各列の幅を指定します。
Width属性にはHeight属性と同様に、数値、Auto、* のいずれかを指定することができます。

3列作成し、各列の幅を 200, Auto, *とする場合は、下記のようにします。

3列作成し、それぞれの幅を指定する例

<Grid.ColumnDefinitions>
    <ColumnDefinition Width="200" />
    <ColumnDefinition Width="Auto" />
    <ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>

————————
作成した行、列の中にコントロールを配置する場合は、各コントロールで何行何列に配置するかGrid.Row、Grid.Columnで指定します。このように親要素で定義されるプロパティについて子要素がそれぞれの値を指定できるようにするプロパティのことを添付プロパティと呼びます。

Grid.RowおよびGrid.Columには0から始まる数値を指定します。
たとえば1行2列にTextBlockコントロールを配置する場合には下記のようにします。

1行2列にTextBlockコントロールを配置する例

<TextBlock Grid.Row="0" Grid.Column="1" Text="1行目" />

上記をまとめた<Grid>のXAML例は下記の通りです。
<Grid>のXAML例

<Grid>のXAML例
<Grid Grid.Row="1" Grid.Column="0">
	<Grid.RowDefinitions>
	    <RowDefinition Height="100"/>
	    <RowDefinition Height="200" />
	    <RowDefinition Height="*"/>
	</Grid.RowDefinitions>

	<Grid.ColumnDefinitions>
	    <ColumnDefinition Width="200" />
	    <ColumnDefinition Width="Auto" />
	    <ColumnDefinition Width="*" />
	</Grid.ColumnDefinitions>

    <TextBlock Grid.Row="0" Grid.Column="1" Text="1行2列" FontSize="50" Width="300"/>
</Grid>

実行してしまうと、行と列がどのように定義されているか見えなくなってしまいます。
デザイナで表示例は下記の通りです。

行と列の定義例