コントロールを格子状に並べるためのコントロールです。
RowDefinitions プロパティと ColumnDefintions プロパティで行と列の定義をおこない、
Row 添付プロパティと Column 添付プロパティによって各コントロールの配置を決定します。
ページ内リンク
RowDefinitions プロパティと ColumnDefinitions プロパティ
RowDefinitions プロパティには定義したい行数分だけ RowDefinition を並べることで
Grid コントロールの行に関する定義をおこないます。
例えば 3 行の行を定義する場合は次のようになります。
上記のように記述すると、XAML デザイナー上の表示が次のように 3 行分の領域として認識します。
行の高さは Height プロパティで変更できますが、特に指定しない場合は残っている領域を等分した高さになります。
この比率を変更したい場合は "*" を使って表現します。
例えば 2 行目を他の行の 2 倍の高さにしたい場合は "2*" と表記します。
もちろん絶対値で指定することもできます。
ここで、ウィンドウの高さを 200 から 300 に変更してみます。
すると、絶対値で指定されている 1 行目は高さが変わらず、
その他の行はウィンドウの高さに応じて高さが変わっていますが、
2 行目が 3 行目の 2 倍の高さを持っていることに変わりはありません。
試しに Button コントロールを置いてみます。
Grid コントロール内でコントロールを配置した場合、
特に指定しない限りそのコントロールは 1 行 1 列の位置に配置されます。
この状態では、Button コントロールが Grid コントロールに合わせてサイズが自動調整されています。
これを、Grid コントロールが Button コントロールに合わせてサイズが自動調整されるようにするには、
RowDefinitions の Height プロパティに "Auto" を指定します。
また、MinHeight プロパティや MaxHeight プロパティによって行の高さの最小値または最大値を指定することもできます。
ウィンドウサイズが変更されたときにレイアウトを崩したくないときなどに使用します。
このように、Height プロパティを指定していないので本来は 3 行目と同じ高さとなるはずですが、
MaxHeight プロパティによって高さを制限されているため、
ウィンドウサイズによっては 3 行目の高さと異なるようになります。
以上が行に関する定義方法です。列に関しては "Row" の部分が "Column" に変わり、
"Height" の部分が "Width" に変わるだけで、
後はすべて同じなのでここでは説明を省略します。
Row 添付プロパティと Column 添付プロパティ
Grid 内のコントロールの配置を変更するには、
Grid コントロールの Row 添付プロパティおよび Column 添付プロパティを使用します。
添付プロパティとは、任意のオブジェクトに対して設定できるプロパティで、
ここでは配置を指定したいコントロールに対して設定します。
サンプルとして次のような 3 行 3 列の Grid コントロールを対象とします。
この Grid コントロールには既に Button コントロールを配置して言いますが、
その位置は特に指定していません。
Button コントロールの配置を特に指定していないため、
既定値である 1 行 1 列に表示されています。
例えばこの Button コントロールを 3 行 2 列に表示させたい場合、
Button コントロールに対して Grid の Row 添付プロパティおよび Column 添付プロパティを次のように指定します。
行番号および列番号は 0 始まりとなるので、3 行 2 列を指定する場合は XAML 上では Row に 2、Column に 1 を指定します。
RowSpan 添付プロパティと ColumnSpan 添付プロパティ
Grid の中で行または列を結合させることもできます。
例えば Fig.9 のように 3 行 2 列に表示されている Button コントロールを、
右隣の行と結合させて配置したいときは次のように ColumnSpan 添付プロパティを指定します。
2 列を結合したいので ColumnSpan 添付プロパティに 2 を指定しています。
行に関する結合は RowSpan 添付プロパティを使用して同様に指定します。
GridSplitter による高さまたは幅の動的変更
GridSplitter コントロールによって、Grid コントロールの行の高さまたは列の幅をマウス操作で変更できるようになります。
次のコードは 3 行の Grid コントロールの 2 行目に GridSplitter コントロールを配置することで、
1 行目と 3 行目の境界線を動かすような UI を実現しています。
次のコードは 3 列の Grid コントロールで 1 列目と 3 列目に境界線を作るコードです。
ここで注意しなければならないのは、HorizontalAlignment プロパティに Center を指定しているところです。
もし HorizontalAlignment プロパティを指定しない場合、
GridSplitter をドラッグ操作しようとしても、なぜか左に動きません。
また、右に動かすと左のコンテンツと GridSplitter の間に変な余白ができてしまいます。
下図は 1 列目に "ひだり" ボタン、3 列目に "みぎ" ボタンを配置し、
GridSplitter の HorizontalAlignment プロパティを指定せずに起動した結果です。