Controlar eventos de un CheckBox

El control CheckBox puede tener 3 estados Check, Uncheck e Indeterminate. Por defecto el control solamente utiliza los dos primeros, pero podemos mediante la propiedad IsThreeState, definir que necesitamos utilizar los 3 estados.

Al momento de hacer click sobre un CheckBox, se produce un evento de acuerdo al estado actual del mismo. Los eventos que pueden ocurrir son Checked, Unchecked o Indeterminate

El siguiente es el código XAML donde vamos a poner dos CheckBox, uno con 2 estados y otro con 3 estados, además vamos a definir los handlers para los eventos.

<Grid x:Name="LayoutRoot" Background="White">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
    
    <CheckBox x:Name="checkDosEstados" Grid.Row="1" 
              Content="Two State CheckBox" 
              Checked="checkPrueba_Check" 
              Unchecked="checkPrueba_Unchecked" 
              Margin="5,0,0,0" />
    <TextBlock x:Name="text1" Grid.Row="2" Margin="5,0,0,0" />
 
    <CheckBox x:Name="checkTresEstados" Grid.Row="3" 
              Content="Three State CheckBox" 
              IsThreeState="True" Checked="checkPrueba_Check" 
              Indeterminate="checkPrueba_Indeterminate" 
              Unchecked="checkPrueba_Unchecked" 
              Margin="5,10,0,0" />
    <TextBlock x:Name="text2" Grid.Row="4" Margin="5,0,0,0" />        
</Grid>

A continuación vamos a definir los handlers para mostrar en un TextBox el estado actual de cada CheckBox.

private void checkPrueba_Check(object sender, RoutedEventArgs e)
{
    CheckBox checkPrueba = sender as CheckBox;
    if (checkPrueba.Name == "checkDosEstados")
        text1.Text = "Estado: Checked";
    else
        text2.Text = "Estado: Checked";
}
 
private void checkPrueba_Unchecked(object sender, RoutedEventArgs e)
{
    CheckBox checkPrueba = sender as CheckBox;
    if (checkPrueba.Name == "checkDosEstados")
        text1.Text = "Estado: Unchecked";
    else
        text2.Text = "Estado: Unchecked";
}
 
private void checkPrueba_Indeterminate(object sender, RoutedEventArgs e)
{
    CheckBox checkPrueba = sender as CheckBox;
    text2.Text = "Estado: Indeterminate";
}

No Comments