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

RadioButton Inputs

RadioButton は同一グループ内で排他的に1つだけ選択できるコントロールです。同じ GroupName を持つ RadioButton は連動しており、一つを選ぶと他が自動的に解除されます。ToggleButton を継承しています。

概要

WPF の RadioButtonToggleButton を継承したコントロールで、同一グループ内での単一選択を実現します。GroupName が同じ RadioButton 同士は排他的に動作し、一方を選ぶと同じグループの他のボタンが自動で解除されます。

GroupName を設定しない場合は親コンテナが暗黙のグループとなります。GroupName を使うと、異なる親コンテナに配置された RadioButton でも同一グループとして排他的に動作させることができます。

MVVM での実装パターンとしては、各 RadioButton の IsChecked を ViewModel の bool プロパティにバインドする方法と、列挙型プロパティと IValueConverter を組み合わせる方法があります。列挙型コンバーターを使うと、選択肢が増えても ViewModel プロパティが一つで済むため管理しやすくなります。

ContentControl を継承しているため、テキストだけでなくアイコンや複合パネルをラベルとして使用できます。ControlTemplate を変更することで、ボタン形式のトグルセレクターや任意のカスタム外観に変えることができます。

画面キャプチャ

radiobutton demo screen

デモしているプロパティ

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

プロパティ設定値説明
GroupNamestring (Null = 親コンテナが範囲)同じ画面内に複数の独立した選択グループを持ちたいときに設定します。同じ GroupName を持つ RadioButton はひとつのグループとして排他的に動作し、どれか一方を選ぶと同グループの他のボタンが自動解除されます。GroupName が null の場合は同一の親コンテナ(例: StackPanel)内の RadioButton が暗黙のグループを形成します。注意点として、GroupName は親コンテナをまたいで機能するため、異なる StackPanel に配置した RadioButton でも同じ GroupName を設定すると同一グループとして排他動作します。意図しない排他制御を避けるため、グループごとに必ずユニークな GroupName を設定してください。
IsChecked (ToggleButton)bool?RadioButton が現在選択されているかどうかを示します。コードから IsChecked = true を設定すると、同じグループ内の他のボタンが自動的に解除されます。TwoWay バインドで ViewModel の bool プロパティに接続するのが標準パターンです。注意点として、各 RadioButton の IsChecked を個別の bool プロパティにバインドする場合、ViewModel 側のいずれかを true にしたときに他のプロパティを false に更新しないと状態が不整合になります。選択肢が多い場合は列挙型+IValueConverter のパターンで管理すると同期問題を防げます。
VerticalContentAlignment (Control)Top / Center / Bottom / StretchRadioButton のラベルに複数行のテキストや縦に長いパネルを配置するとき、ラジオボタン記号とラベルの垂直方向の位置を揃えるために使用します。デフォルトの Top では短いラベルは問題ありませんが、ラベルが複数行にわたる場合にボタン記号が上端に寄ってしまうことがあるため、Center を指定することで自然な整列が得られます。

XAML 使用例

<StackPanel>
  <RadioButton Content="オプション A" GroupName="MyGroup"
               IsChecked="{Binding IsOptionASelected, Mode=TwoWay}" />
  <RadioButton Content="オプション B" GroupName="MyGroup"
               IsChecked="{Binding IsOptionBSelected, Mode=TwoWay}" />
  <RadioButton Content="オプション C" GroupName="MyGroup"
               IsChecked="{Binding IsOptionCSelected, Mode=TwoWay}" />
</StackPanel>

<!-- 列挙型バインド(IValueConverter を使用) -->
<RadioButton Content="小" GroupName="SizeGroup"
             IsChecked="{Binding SelectedSize,
               Converter={StaticResource EnumBoolConverter},
               ConverterParameter=Small}" />

主な使用例

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

関連コントロール

ソースコード

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

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