我有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
}
如果此事件是手动触发还是设置在代码后面?也许这是我不知道的发件人的财产?
答案 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
}
}