2011-10-06 9 views
14

Sto usando un ToggleButton in una finestra WPF:pulsante WPF Toggle Controllato evento/Uchecked con un gestore

<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> 

Ho due eventi che sono il monitoraggio, ma questo avviene in due codice diverso dietro i gestori. Come può essere fatto in uno solo?

Avrò molti ToggleButton s e il codice può diventare grande.

+0

Vuoi un evento singolo per l'evento selezionato e deselezionato o vuoi due gestori diversi ma a livello globale, ad esempio in un solo file? –

+0

Sì solo per selezionato e deselezionato. Grazie! –

risposta

17

È possibile collegare un singolo evento clic del ToggleButton e nel suo gestore è possibile controllare la proprietà ToggleButtonIsChecked per tipo colata l'oggetto mittente nel vostro gestore di come questo -

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

Viene visualizzato il seguente errore: Impossibile convertire il tipo bool? bool. Come posso risolvere questo in modo sicuro? –

+3

L'operatore a coalescenza nulla funziona bene per questo. ex) 'if ((mittente come ToggleButton) .IsChecked ?? false)' –

+0

Il tuo toggleButton ha tre stati o due stati? –

0

Prova questa

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

Non si dovrebbe usare l'evento Click come suggeriscono alcune risposte, perché non funzionerà quando la proprietà IsChecked viene modificata dal codice o da qualsiasi altro evento diverso dal mouse (tastiera, animazione ..). Questo è semplicemente un bug.

Invece è possibile utilizzare lo stesso gestore sia per Checked sia per Unchecked e agire in base alla proprietà IsChecked.

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

Assolutamente corretto. – KyloRen