Событие WPF Toggle Button Checked / Uchecked с одним обработчиком - PullRequest
18 голосов
/ 06 октября 2011

Я использую ToggleButton в окне 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>

У меня есть два события, которые я отслеживаю, но это делается в двух разных кодах за обработчиками. Как это можно сделать только в одном?

У меня будет много ToggleButton с, и код может стать большим.

Ответы [ 3 ]

21 голосов
/ 06 октября 2011

Вы можете прикрепить событие отдельного щелчка вашего ToggleButton, а в его обработчике вы можете проверить свойство ToggleButton IsChecked, введя объект-отправитель в ваш обработчик следующим образом -

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>
12 голосов
/ 10 февраля 2016

Не следует использовать событие Click, как предлагают некоторые ответы, поскольку оно не будет работать, когда свойство IsChecked изменяется кодом или любым другим событием, кроме мыши (клавиатура, анимация ..). Это просто ошибка.

Вместо этого вы можете использовать один и тот же обработчик для Checked и Unchecked и выполнять действия в зависимости от свойства IsChecked.

<ToggleButton
    Checked="toggleButton_IsCheckedChanged"
    Unchecked="toggleButton_IsCheckedChanged" />
0 голосов
/ 03 сентября 2014

Попробуйте это

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