如何检查是否手动单击了控件

本文关键字:单击 控件 是否 何检查 检查 | 更新日期: 2023-09-27 18:08:55

我有一个ToggleButton与这个结构:

<ToggleButton Focusable="False" Width="19" Height="19" x:Name="tbBtn" Checked="ToggleButton_Checked" Unchecked="ToggleButton_Unchecked"/>

现在我的目标是检入ToggleButton_Checked事件,如果用户手动单击了这个事件,或者我通过代码触发了这个事件。

特别是,在某些情况下,我在代码后面设置IsChecked属性,如下所示:
tbBtn.IsChecked = true;

Is possible check in the sender:

private void ToggleButton_Checked(object sender, RoutedEventArgs e)
{
   //perform check
}

此事件是手动触发还是设置在代码后面?也许这是sender中我不知道的属性?

如何检查是否手动单击了控件

尝试如下:

ToggleButton button = sender as ToggleButton;
其他

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事件。

    <ToggleButton x:Name ="tbBtn" Content="Test" Click="ToggleButton_Click"></ToggleButton>

代码后面;

    public MainWindow()
    {
        InitializeComponent();
        tbBtn.IsChecked = true; 
    }
    private void ToggleButton_Click(object sender, RoutedEventArgs e)
    {
        var tb = sender as ToggleButton;
        if(tb != null)
        {
            if(tb.IsChecked.HasValue && tb.IsChecked.Value)
            {
                Debug.WriteLine("AlreadyChecked");
            }
        }
    }

使用类级别变量来跟踪它。因此,代码应该是

ClickedFromCode = true;
tbBtn.IsChecked = true;
ClickedFromCode = false;

同一变量可用于从代码中触发的多个事件。现在捕获

中的布尔值
private void ToggleButton_Checked(object sender, RoutedEventArgs e)
{
   //perform check
   if (ClickedFromCode)
   { //do something
   }
   else
   {  //do something
   }
}