使用一个处理程序的WPF切换按钮Checked/Uchecked事件

Rya*_*n R 18 wpf events togglebutton

ToggleButton在WPF窗口中使用a :

 <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>
Run Code Online (Sandbox Code Playgroud)

我有两个正在监视的事件,但这是在处理程序后面的两个不同代码中完成的.怎么能只用一个呢?

我会有很多ToggleButton,代码可以变大.

Roh*_*ats 22

您可以附加您的单击事件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
   }
}
Run Code Online (Sandbox Code Playgroud)

XAML:

<ToggleButton Height="37" HorizontalAlignment="Left" Margin="485.738,254.419,0,0"     VerticalAlignment="Top" Width="109" IsEnabled="True" Click="ToggleButton_Click">Timeout</ToggleButton>
Run Code Online (Sandbox Code Playgroud)

  • 如果在这种情况下它是两个状态你就可以这样做 - if((sender as ToggleButton).IsChecked.Value){} (6认同)
  • 空融合运算符适用于此.ex)`if((sender as ToggleButton).IsChecked ?? false)` (4认同)

Are*_*rek 12

您不应该使用Click事件作为一些答案建议,因为当IsChecked通过代码或鼠标之外的任何其他事件(键盘,动画......)更改属性时,它将不起作用.这只是一个错误.

相反,您可以为两者使用相同的处理程序,CheckedUnchecked根据IsChecked属性执行操作.

<ToggleButton
    Checked="toggleButton_IsCheckedChanged"
    Unchecked="toggleButton_IsCheckedChanged" />
Run Code Online (Sandbox Code Playgroud)