かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

WPF4.5入門 その35 「RadioButtonコントロール」

RadioButtonコントロールは、複数の選択肢の中から1つをユーザーに選択してもらうときに使うコントロールです。RadioButtonコントロールは、デフォルトでは同じパネル(StaciPanelやGridなど)にあるRadioButtonコントロールから、1つだけチェックをつけることが出来ます。また、一度つけてしまったチェックは、ユーザーからは確認できないという特徴があります。チェック状態はCheckBoxコントロールと同様にIsCheckedプロパティで確認でき、Checkedイベントでチェック状態に変更があったことをハンドリングできます。

以下にRadioButtonコントロールの基本的な使い方を示します。1つのStackPanel上に置いたRadioButtonコントロールにCheckedイベントのハンドラを設定しています。

<GroupBox Header="Group1">
    <StackPanel>
        <RadioButton Content="Button1" Checked="RadioButton_Checked"/>
        <RadioButton Content="Button2" Checked="RadioButton_Checked" />
        <RadioButton Content="Button3" Checked="RadioButton_Checked"/>
        <TextBlock x:Name="textBlockSelected" />
    </StackPanel>
</GroupBox>

RadioButton_Checkedイベントハンドラでは、senderを使って選択されたRadioButtonコントロールを取得してtextBlockSelectedにContentの内容を表示しています。

private void RadioButton_Checked(object sender, RoutedEventArgs e)
{
    var radioButton = (RadioButton)sender;
    this.textBlockSelected.Text = radioButton.Content.ToString();
}

実行すると初期状態では、どのRadioButtonコントロールにもチェックは入っていません。

f:id:okazuki:20140815124411p:plain

マウスで選択すると、選択した項目のContentが、下部に表示されます。

f:id:okazuki:20140815124456p:plain

同じパネル上で複数のグループを作成する方法

デフォルトの挙動では、同じパネルに置いたRadioButtonコントロールは、1つしか選択できません。この制限を回避するために、GroupNameというプロパティがあります。GroupNameに文字列を指定すると、同じGroupNameのRadioButtonコントロールの中から1つ選択できるという挙動になります。

以下に、1つのStackPanel上に2つの異なるGroupNameを指定したXAMLを示します。

<GroupBox Header="Group2">
    <StackPanel>
        <RadioButton GroupName="group1" Content="Button1-1" />
        <RadioButton GroupName="group1" Content="Button1-2" />
        <RadioButton GroupName="group1" Content="Button1-3" />
        <RadioButton GroupName="group2" Content="Button2-1" />
        <RadioButton GroupName="group2" Content="Button2-2" />
        <RadioButton GroupName="group2" Content="Button2-3" />
    </StackPanel>
</GroupBox>

実行して、group1とgroup2のRadioButtonコントロールをそれぞれ選択した結果を以下に示します。

f:id:okazuki:20140815124644p:plain

同一パネル上でも、複数のRadioButtonコントロールのグループが出来ていることが確認できます。

過去記事