C#WPFの道#14!CheckBoxとIsThreeState、Indeterminateの使い方

当サイトではアフィリエイト広告を利用しています。

WPF

CheckBoxとは?

CheckBox(チェックボックス)とは、ONかOFFを選択させるためのコントロールです。

チェックボックスの状態

チェックボックスの状態はIsCheckedプロパティで取得・設定できます。状態はON、OFF、Indeterminate(不確定)の三種類です。不確定はONでもOFFでもない状態であり、IsCheckedはnullとなります。

IsThreeState

IsThreeStateプロパティをTrueにしたときのみ、状態をON、OFF、Indeterminate(不確定)の3種類となり、これをFalseにした場合はONかOFFの2種類のみの選択となります。

Indeterminate(不確定)の使い道

Indeterminate(不確定)は未選択状態を表すため、確実にユーザーの意思で選択してもらいたいときに有効です。初期値をIndeterminate(不確定)にしておき、SaveにIndeterminate(不確定)の場合は、未選択ということでエラーチェックに引っ掛けることが可能です。IsThreeStateをFalseにしていてもIsCheckedの初期値にNullを設定することが可能なため、初期値のみNullとし、一度選択したら、ONかOFFのいずれかという操作をさせることが可能です。

イベント

IsCheckedの状態が変わったときに、Checked、Unchecked、Indeterminateの3つのイベントのいずれかが通知されます。

サンプルコード

<Window x:Class="WPF014.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WPF014"
        mc:Ignorable="d"
        Title="MainWindow" Height="300" Width="300">
    <Grid>
        <CheckBox x:Name="MyCheckBox"
                  FontSize="20"
                  Margin="10"
                  Content="check box"
                  VerticalContentAlignment="Center"
                  Height="30"
                  VerticalAlignment="Top"
                  
                  IsThreeState="False"
                  Checked="MyCheckBox_Checked"
                  Unchecked="MyCheckBox_Unchecked"
                  Indeterminate="MyCheckBox_Indeterminate"
                  IsChecked="{x:Null}"/>
    </Grid>
</Window>

IsThreeStateをTrueにすると3種類のイベントが通知されます。

using System;
using System.Windows;

namespace WPF014
{
    ///
    /// MainWindow.xaml の相互作用ロジック
    /// 
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void MyCheckBox_Checked(object sender, RoutedEventArgs e)
        {
            Console.WriteLine("MyCheckBox_Checked:" + MyCheckBox.IsChecked);
        }

        private void MyCheckBox_Unchecked(object sender, RoutedEventArgs e)
        {
            Console.WriteLine("MyCheckBox_Unchecked:" + MyCheckBox.IsChecked);
        }

        private void MyCheckBox_Indeterminate(object sender, RoutedEventArgs e)
        {
            Console.WriteLine("MyCheckBox_Indeterminate:" + MyCheckBox.IsChecked);
        }
    }
}

画面イメージ