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

时间:2016-09-26 12:28:51

标签: c# wpf

我有ToggleButton这种结构:

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

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

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

tbBtn.IsChecked = true;

可以检查发件人:

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

如果此事件是手动触发还是设置在代码后面?也许这是我不知道的发件人的财产?

3 个答案:

答案 0 :(得分:0)

尝试类似的事情:

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>

答案 1 :(得分:0)

您可以改为使用点击事件。

    <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");
            }
        }
    }

答案 2 :(得分:0)

使用类级别变量来跟踪它。所以,代码将类似于

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

相同的变量可用于从代码触发的多个事件。现在在

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