WPF 標準コントロールデモアプリ › UniformGrid

UniformGrid Layout

UniformGrid はすべてのセルが同じサイズになるシンプルなグリッドパネルです。行数・列数を指定すると、子要素を均等に配置します。カレンダー・ゲームボード・タイルグリッドなどに使われます。

概要

WPF の UniformGridPanel を継承したシンプルなグリッドパネルです。RowsColumns を設定すると、全セルが同じサイズで子要素を均等に配置します。通常の Grid とは異なり、個別の行・列定義が不要です。

RowsColumns の両方を設定しない場合、UniformGrid は子要素の数に基づいて自動的に行数・列数を計算します(正方形に近い形になるよう算出)。子要素が 4 つなら 2×2、9 つなら 3×3 という具合です。

FirstColumn プロパティを設定すると、最初の行の先頭を空のセルで埋めてオフセットを作ることができます。例えば週カレンダーで月の最初の日が水曜日ならば FirstColumn="3"(0始まりで日月火水...の水=3)と設定します。

UniformGrid は動的なセル数には対応していません(子要素数が変わると再計算が必要です)。また、GridSplitter のようなリサイズ機能もありません。シンプルな均等グリッドが必要なケースに特化した軽量なパネルです。

画面キャプチャ

uniformgrid demo screen

デモしているプロパティ

以下のプロパティが WPF 標準コントロールデモアプリでインタラクティブにデモされています。

プロパティ設定値説明
Rowsint (0 = auto)カレンダーの週行数や三目並べの盤など、行数を明示的に決めたいときに設定します。設定した行数でグリッドが固定され、子要素がその行数内に均等に収まります。0(デフォルト)は子要素の数と Columns の値から自動計算されます。Rows と Columns の積より子要素が多い場合、はみ出た子要素は表示されないため子要素の数を管理してください。
Columnsint (0 = auto)1 週間を 7 列で表す週カレンダーや、4 列タイルのダッシュボードなど、列数を固定したいときに設定します。設定した列数で全子要素が均等幅に並びます。0(デフォルト)は Rows の値と子要素数から自動計算されます。Columns のみ指定し Rows を 0 のままにすると、行数は自動計算されるため子要素が増えても列数は維持されます。
FirstColumnint月の最初の日が週の途中から始まるカレンダーで、最初の行に空セルのオフセットを作りたいときに使います。設定した数だけ先頭行の前方に空のセルが挿入され、各日付を正しい曜日列に配置できます。FirstColumn の値が Columns の値以上の場合は無視されるため、月初の曜日インデックス(0=日曜日)が Columns 未満に収まるよう管理してください。

XAML 使用例

<!-- 3x3 のゲームボード(三目並べ) -->
<UniformGrid Rows="3" Columns="3" Width="150" Height="150">
  <Button Content="X" />
  <Button Content="O" />
  <Button />
  <Button Content="X" />
  <Button />
  <Button Content="O" />
  <Button />
  <Button Content="X" />
  <Button />
</UniformGrid>

<!-- 均等タイルグリッド(Columns のみ指定) -->
<UniformGrid Columns="4">
  <Border Background="CornflowerBlue" Margin="2">
    <TextBlock Text="タイル 1" HorizontalAlignment="Center" />
  </Border>
  <!-- ... その他のタイル -->
</UniformGrid>

主な使用例

ヒントとベストプラクティス

関連コントロール

ソースコード

このデモ画面のソースコードは GitHub で公開しています。

GitHub で UniformGrid のソースコードを見る →