2011-10-06 8 views
14

Używam ToggleButton w oknie WPF:WPF Przełącznik Przycisk sprawdzone zdarzenie/Uchecked z jednego przewodnika

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

Mam dwa wydarzenia, które mam monitoring, ale odbywa się to w dwóch różnych kod związany koparki. Jak można to zrobić tylko w jednym?

Będę miał wiele ToggleButton s, a kod może być duży.

+0

Czy chcesz jedno zdarzenie dla zaznaczonego i niezaznaczonego zdarzenia, czy chcesz dwie różne procedury obsługi, ale na poziomie globalnym, tj. Tylko w jednym pliku? –

+0

Tak, tylko dla zaznaczenia i odznaczenia. Dzięki! –

Odpowiedz

17

można dołączyć jedno zdarzenie kliknięcia ToggleButton i jego obsługi można sprawdzić właściwość ToggleButtonIsChecked według typu odlewania obiektu nadawcy w swojej obsługi tak -

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

Pojawia się następujący błąd: Nie można przekonwertować typu bool? do bool. Jak mogę to naprawić bezpiecznie? –

+3

Operator koalesulacji zerowej działa dobrze w tym celu. ex) 'if ((nadawca jako ToggleButton) .IsChecked ?? false)' –

+0

Czy twój toggleButton jest w stanie trójstanowym lub dwustanowym? –

0

Spróbuj

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

Nie należy używać zdarzenia Click, ponieważ niektóre odpowiedzi sugerują, ponieważ nie będzie działać, gdy właściwość IsChecked zostanie zmieniona przez kod lub jakiekolwiek inne zdarzenie niż mysz (klawiatura, animacja ..). To po prostu błąd.

Zamiast tego można użyć tego samego programu obsługi zarówno dla Checked, jak i Unchecked i wykonać czynność w zależności od właściwości IsChecked.

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

Absolutnie poprawne. – KyloRen

Powiązane problemy