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";
}