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

WrapPanel Layout

WrapPanel は子要素を水平または垂直方向に並べ、コンテナの端に達したら次の行(または列)に折り返すパネルです。タグクラウド・フォトギャラリー・ツールパレットなどに使われます。

概要

WPF の WrapPanel は子要素を一方向に並べ、コンテナのサイズを超えたら次の行(または列)に折り返すパネルです。StackPanel が折り返しなしの線形配置なのに対し、WrapPanel は自動折り返しを提供します。

OrientationHorizontal(デフォルト)では子要素を左から右に並べ、行が一杯になったら次の行に移動します。Vertical では上から下に並べ、列が一杯になったら次の列に移動します。

ItemWidthItemHeight を設定すると、すべての子要素が同じ幅・高さに統一されます。設定しない場合(デフォルト NaN)は、各子要素が自然なサイズを使用します。

WrapPanel は動的なコンテンツサイズ変化に自動対応するため、ウィンドウリサイズ時にレイアウトが自動調整されます。ただし、StackPanel に比べてレイアウトの計算コストが高いため、パフォーマンスが重要な大量アイテムの表示には仮想化との組み合わせを検討します。

画面キャプチャ

wrappanel demo screen

デモしているプロパティ

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

プロパティ設定値説明
OrientationHorizontal / Verticalタグクラウドやツールパレットのように要素を左から右に並べて折り返したい場合は Horizontal(デフォルト)、縦方向に並べて次の列に折り返したい場合は Vertical を使います。Horizontal では行が一杯になると次の行に移動し、Vertical では列が一杯になると次の列に移動します。WrapPanel の幅が 0 または無限大(ScrollViewer の水平方向など)の場合、折り返しが意図通りに動作しないことがあります。必ず有限の幅(または高さ)が与えられるコンテナ内に配置してください。
ItemWidthdouble (NaN = 自動)ツールパレットやカラーパレットのようにすべての子要素を同じ幅で均等に並べたいときに設定します。設定すると各子要素が指定した幅にクリップまたは引き伸ばされ、均等な列幅のタイルレイアウトになります。NaN(デフォルト)は各子要素の自然な幅を使用するため、要素ごとにサイズが異なります。子要素のコンテンツが ItemWidth より広い場合はクリップされてコンテンツが見切れることがあります。
ItemHeightdouble (NaN = 自動)行の高さをすべて揃えたいサムネイルギャラリーなどで使います。設定するとすべての子要素が指定した高さで表示され、行ごとの高さがバラつかなくなります。NaN(デフォルト)は各子要素の自然な高さを使用します。ItemWidth と同様に、コンテンツが ItemHeight より高い場合はクリップされる点に注意してください。

XAML 使用例

<!-- タグクラウド -->
<WrapPanel Margin="8">
  <Border Background="CornflowerBlue" CornerRadius="12"
          Padding="8,4" Margin="4">
    <TextBlock Text="WPF" Foreground="White" />
  </Border>
  <Border Background="MediumSeaGreen" CornerRadius="12"
          Padding="8,4" Margin="4">
    <TextBlock Text=".NET 10" Foreground="White" />
  </Border>
</WrapPanel>

<!-- 均等幅のボタンパレット -->
<WrapPanel ItemWidth="80" ItemHeight="32">
  <Button Content="赤" Background="Red" />
  <Button Content="青" Background="Blue" />
  <Button Content="緑" Background="Green" />
  <Button Content="黄" Background="Yellow" />
</WrapPanel>

主な使用例

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

関連コントロール

ソースコード

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

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