Кнопки WPF тумблер проверено/событие Uchecked с одним обработчиком

Я использую 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>

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

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

3 ответов


вы можете прикрепить одно событие щелчка вашего 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>

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

вы можете использовать один и тот же обработчик для обоих Checked и Unchecked и выполнить действие в зависимости от IsChecked собственность.
<ToggleButton
    Checked="toggleButton_IsCheckedChanged"
    Unchecked="toggleButton_IsCheckedChanged" />

попробуй такое

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