2011-10-06 19 views
14

estoy usando un ToggleButton en una ventana de WPF:botón WPF Activar cuadros de eventos/Uchecked con un manejador

<ToggleButton Height="37" 
      HorizontalAlignment="Left" 
      Margin="485.738,254.419,0,0" 
      VerticalAlignment="Top" 
      Width="109" 
      IsEnabled="True" 
      Checked="toggleAPDTimeoutErr_Checked" 
      Unchecked="toggleAPDTimeoutErr_Unchecked">Timeout</ToggleButton> 

Tengo dos eventos que estoy siguiendo, pero esto se hace en dos código diferente detrás de los manipuladores. ¿Cómo se puede hacer esto en solo uno?

Tendré muchos ToggleButton s, y el código puede agrandarse.

+0

¿Desea un evento único para eventos marcados y no marcados o desea dos controladores diferentes, pero a nivel global, es decir, solo en un archivo? –

+0

Sí solo por marcar y desmarcar. ¡Gracias! –

Respuesta

17

Puede adjuntar un solo evento clic de su ToggleButton y en su controlador puede comprobar la propiedad ToggleButtonIsChecked por tipo fundición del remitente del objeto en el controlador como este -

private void ToggleButton_Click(object sender, RoutedEventArgs e) 
{ 
    if((sender as ToggleButton).IsChecked) 
    { 
     // Code for Checked state 
    } 
    else 
    { 
     // Code for Un-Checked state 
    } 
} 

Xaml:

<ToggleButton Height="37" HorizontalAlignment="Left" Margin="485.738,254.419,0,0"  VerticalAlignment="Top" Width="109" IsEnabled="True" Click="ToggleButton_Click">Timeout</ToggleButton> 
+0

Aparece el siguiente error: ¿No se puede convertir el tipo bool? bool ¿Cómo puedo solucionar esto de forma segura? –

+3

El operador de fusión nula funciona bien para esto. ex) 'if ((remitente como ToggleButton) .IsChecked ?? false)' –

+0

¿Tu toggleButton tiene tres estados o dos estados? –

0

probar este

private void tBtn_super_Click(object sender, RoutedEventArgs e) 
     { 
      if (tBtn_super.IsChecked == true) 
      { 
       MessageBox.Show("True"); 
      } 
      else 
      { 
       MessageBox.Show("False"); 
      } 
     } 
7

No debe usar el evento Click como sugieren algunas respuestas, porque no funcionará cuando se cambie la propiedad IsChecked por código o cualquier otro evento que no sea el mouse (teclado, animación ...). Esto es simplemente un error.

En su lugar, puede utilizar el mismo controlador para Checked y Unchecked y realizar acciones dependiendo de la propiedad IsChecked.

<ToggleButton 
    Checked="toggleButton_IsCheckedChanged" 
    Unchecked="toggleButton_IsCheckedChanged" /> 
+2

Absolutamente correcto. – KyloRen

Cuestiones relacionadas