web-dev-qa-db-fra.com

Evénement Checked/Uchecked du bouton bascule WPF avec un seul gestionnaire

J'utilise une ToggleButton dans une fenêtre WPF:

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

Je surveille deux événements, mais cela se fait dans deux codes différents, derrière des gestionnaires. Comment cela peut-il être fait dans un seul?

J'aurai beaucoup de ToggleButtons, et le code peut devenir volumineux.

16
Ryan R

Vous pouvez attacher un événement de simple clic de votre ToggleButton et dans son gestionnaire vous pouvez vérifier la propriété ToggleButtonIsChecked en tapant le type de l'objet émetteur dans votre gestionnaire de la manière suivante:

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>
20
Rohit Vats

Vous ne devez pas utiliser l'événement Click comme le suggèrent certaines réponses, car il ne fonctionnera pas si la propriété IsChecked est modifiée par le code ou par tout autre événement que la souris (clavier, animation, etc.). C'est simplement un bug.

Au lieu de cela, vous pouvez utiliser le même gestionnaire pour Checked et Unchecked et effectuer les actions en fonction de la propriété IsChecked.

<ToggleButton
    Checked="toggleButton_IsCheckedChanged"
    Unchecked="toggleButton_IsCheckedChanged" />
11
Arek

Essaye ça

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