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

CheckBox Inputs

CheckBox はユーザーがオプションを選択・解除できるトグルコントロールです。ToggleButton を継承しており、IsThreeState を有効にすると チェック済み・非チェック・不定(null)の 3 状態をサポートします。独立した複数の選択肢を並べる場合に最適です。

概要

WPF の CheckBoxToggleButton を継承したコントロールで、 ユーザーが独立してオン/オフを切り替えられる選択肢を提供します。RadioButton とは異なり、 同一グループ内でも複数の CheckBox を同時にチェックできます。

IsChecked プロパティは bool?(null 許容)型です。 IsThreeState="True" にすると、ユーザーがクリックするたびに falsetruenull(不定)→ false とサイクルします。 不定状態は「一部選択」を表す「全選択」チェックボックスなどに使用されます。

MVVM での実装では、IsCheckedbool? 型の ViewModel プロパティに TwoWay バインドするのが標準です。 単純な true/false の場合は bool プロパティへのバインドも可能で、 WPF が nullfalse の変換を自動で行います。

ContentControl を継承しているため、ラベル部分には文字列だけでなく画像やパネルなど 任意の WPF 要素を配置できます。これにより、アイコン付きの CheckBox や 複数行ラベルを持つ選択肢を簡単に作成できます。

画面キャプチャ

checkbox demo screen

デモしているプロパティ

以下のプロパティが WPF 標準コントロールデモアプリでインタラクティブにデモされています。 アプリ上でリアルタイムに各プロパティを変更してその動作を確認できます。

プロパティ設定値説明
IsChecked (ToggleButton) bool? (Null / False / True) 選択状態を ViewModel と同期させるために TwoWay バインドで使用します。bool? 型のプロパティにバインドすると null(不定状態)も正しく扱えますが、bool 型のプロパティにバインドした場合は WPF が自動で null ↔ false の変換を行います。ただし IsThreeState="True" の状態で bool 型バインドを使うと、ユーザーが null 状態を通過した際に ConvertBack が変換できずにバインドエラーが発生することがあります。3 状態を使う場合は必ず bool? 型バインドを使用してください。
IsThreeState (ToggleButton) bool リストやグリッドの「すべて選択」チェックボックスで、全選択・一部選択・全解除の 3 状態を 1 つの CheckBox で表現したいときに使用します。True にすると、ユーザーがクリックするたびに false → true → null(不定)→ false のサイクルで状態が変化し、null は視覚的にハイフンやグレーのチェックで表示されます。注意点として、IsThreeState="True" を設定する際は必ず bool? 型のバインドを使用してください。bool 型でバインドすると null 状態の変換に失敗してバインドエラーになります。
VerticalContentAlignment (Control) Top / Center / Bottom / Stretch CheckBox のラベル部分に複数行のテキストやパネルを配置するとき、チェックボックス記号と縦方向の位置を揃えたい場合に使用します。例えば Center にするとチェックボックス記号がラベル全体の中央に揃い、Top にすると先頭行に揃います。デフォルト値は Top であるため、ラベルの高さが低い場合は問題になりませんが、複数行の長いラベルを持つ場合はチェックボックス記号が上端に寄ってしまい見た目が不自然になることがあります。その場合は Center を指定すると自然に見えます。

XAML 使用例

3 状態 CheckBox と「全選択」パターンの例です:

<StackPanel>
  <!-- 通常の CheckBox -->
  <CheckBox Content="メール通知を有効にする"
            IsChecked="{Binding IsEmailEnabled, Mode=TwoWay}" />

  <!-- 3 状態 CheckBox(全選択パターン) -->
  <CheckBox Content="すべて選択" IsThreeState="True"
            IsChecked="{Binding AllSelected, Mode=TwoWay}" />

  <!-- アイコン付き CheckBox -->
  <CheckBox IsChecked="{Binding IsStarred, Mode=TwoWay}">
    <StackPanel Orientation="Horizontal">
      <TextBlock Text="★" Foreground="Gold" />
      <TextBlock Text=" お気に入りに追加" />
    </StackPanel>
  </CheckBox>
</StackPanel>

主な使用例

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

関連コントロール

ソースコード

このデモ画面のソースコードは GitHub で公開しています。アプリ内の「コード表示」ボタンから各プロパティの実際の XAML を確認できます。

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