我有一组WPF CheckBox,它们有一个Checked事件处理程序,当用户点击其中一个时处理某些逻辑。但是,我也有一个“全部清除”按钮,点击后,将清除所有复选框。如果用户点击“全部清除”按钮,我不希望复选框触发他们的Checked事件。有没有办法做到这一点?有没有办法阻止WPF CheckBox触发Checked事件?
回答
在清除在的开头删除的事件处理程序的所有按钮的事件处理程序,然后在全部清除按钮的事件处理结束重新添加事件处理程序。
这里是一个肮脏的样本:
XAML
<Window x:Class="UncheckedTest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
<CheckBox Height="16" Margin="22,30,136,0" Name="checkBox1" VerticalAlignment="Top"
Unchecked="checkBox1_Unchecked">CheckBox 1</CheckBox>
<CheckBox Height="16" Margin="22,76,136,0" Name="checkBox2" VerticalAlignment="Top"
Unchecked="checkBox2_Unchecked">CheckBox 2</CheckBox>
<CheckBox Margin="22,0,136,121" Name="checkBox3" Height="16" VerticalAlignment="Bottom"
Unchecked="checkBox3_Unchecked">CheckBox 3</CheckBox>
<Button HorizontalAlignment="Right" Margin="0,118,37,121" Name="button1" Width="87"
Click="button1_Click">Uncheck All</Button>
<TextBox Height="74" Margin="22,0,20,13" Name="textBox1" VerticalAlignment="Bottom"
TextWrapping="Wrap" VerticalScrollBarVisibility="Visible" />
</Grid>
</Window>
代码隐藏
using System;
using System.Windows;
namespace UncheckedTest
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
private int i = 1;
public Window1()
{
InitializeComponent();
}
void checkBox3_Unchecked(object sender, RoutedEventArgs e)
{
textBox1.Text = i++.ToString() + ". Checkbox 3 Unchecked." + Environment.NewLine + textBox1.Text;
}
void checkBox2_Unchecked(object sender, RoutedEventArgs e)
{
textBox1.Text = i++.ToString() + ". Checkbox 2 Unchecked." + Environment.NewLine + textBox1.Text;
}
void checkBox1_Unchecked(object sender, RoutedEventArgs e)
{
textBox1.Text = i++.ToString() + ". Checkbox 1 Unchecked." + Environment.NewLine + textBox1.Text;
}
private void button1_Click(object sender, RoutedEventArgs e)
{
checkBox1.Unchecked -= checkBox1_Unchecked;
checkBox2.Unchecked -= checkBox2_Unchecked;
checkBox3.Unchecked -= checkBox3_Unchecked;
checkBox1.IsChecked = false;
checkBox2.IsChecked = false;
checkBox3.IsChecked = false;
checkBox1.Unchecked += checkBox1_Unchecked;
checkBox2.Unchecked += checkBox2_Unchecked;
checkBox3.Unchecked += checkBox3_Unchecked;
}
}
}
谢谢,这个解决方案似乎有点破解,但可能是最好的方法。另一个可行的解决方案是由Jeff提供的解决方案,以创建一个变量,检查是否应该处理'Checked'逻辑。 – 2010-08-27 01:58:26
这将是理想的禁用事件,但我不知道如何做到这一点。
尽管如果按下“全部清除”按钮,添加布尔值以跟踪布尔值将会很容易。然后,只有通过按钮不选中时才执行未经检查的代码。
private bool clearAllClicked = false;
private void button_Click(object sender, RoutedEventArgs e)
{
clearAllClicked = true;
checkbox.IsChecked = false;
clearAllClicked = false;
}
private void checkbox_Unchecked(object sender, RoutedEventArgs e)
{
if (!clearAllClicked)
{
//do stuff
}
}
这是一个可行的解决方案,但我想阻止必要时创建另一个变量。 – 2010-08-27 01:56:53
您可以使用,而不是 '托运' 的 '点击' 事件或“未选中'事件。
'单击'将确保状态更改将来自用户输入(例如通过鼠标按钮或空格键)。
而像cb.IsChecked = value
这样的操作不会触发'点击'事件。
差点忘了!它可能实际上解决了我的问题,谢谢! – Enrico 2013-05-08 14:12:07
只是一个警告,如果使用空格键也不会触发,这也可以切换复选框输入。 – 2017-02-09 15:42:54
- 1. 有没有办法触发事件viewDidUnload?
- 2. WPF故事板事件没有触发
- 3. 有没有办法阻止JQuery Mobile的重复事件?
- 4. 有没有办法阻止.NET中的事件流?
- 5. 有没有办法阻止WatIn超时?
- 6. 有没有办法阻止html警告?
- 7. 有没有办法停止OnItemSaving事件?
- 8. 有没有办法阻止MFMailComposeViewController发送电子邮件?
- 9. CheckBox点击事件未触发(WPF)
- 10. 有没有办法阻止代理?
- 11. 有没有办法阻止WPF页面被导航?
- 12. WPF TargetUpdated事件没有触发ContentControl
- 13. WPF操作事件没有被触发
- 14. NSOutputStream阻止,HasBytesAvailable事件没有被触发
- 15. vscode - 有没有办法手动触发事件?
- 16. 有没有办法在Mac OS X上触发手势事件?
- 17. asp.net有没有办法在Cookie过期时触发Session_End事件?
- 18. 有没有办法解析JSON并在现场触发事件?
- 19. 有没有办法在Javascript中触发“Ctrl + Shift + P”事件?
- 20. 有没有办法手动触发Google地图事件?
- 21. 有没有办法阻止一个特定的孩子触发SIGCHLD?
- 22. 有没有什么办法可以阻止从eclipse触发的mavenized构建
- 23. Maven发布:有没有办法阻止模块上传到Nexus?
- 24. 有没有办法阻止Valgrind发现第一个错误?
- 25. 有没有办法阻止浏览器发送特定的cookie?
- 26. 有没有办法让视频触发HTTP POST事件(或其他事件)
- 27. 有没有办法过滤jQuery中没有触发事件的匹配元素?
- 28. 有没有办法触发一个没有点击事件的updatepanel?
- 29. 有没有办法阻止DataGridViewCheckBoxColumn自动检查点击?
- 30. 有没有办法阻止TJvDocServerForm在未固定时隐藏?
我相信你的意思是Unchecked event right? – 2010-07-22 03:16:00
对不起,Unchecked事件。 – 2010-07-22 03:33:00