我有一組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. 有沒有辦法停止OnItemSaving事件?
- 5. 有沒有辦法阻止代理?
- 6. 有沒有辦法阻止WPF頁面被導航?
- 7. NSOutputStream阻止,HasBytesAvailable事件沒有被觸發
- 8. 有沒有辦法在Mac OS X上觸發手勢事件?
- 9. 有沒有辦法手動觸發Google地圖事件?
- 10. vscode - 有沒有辦法手動觸發事件?
- 11. 有沒有辦法阻止Valgrind發現第一個錯誤?
- 12. 有沒有辦法阻止瀏覽器發送特定的cookie?
- 13. Maven發佈:有沒有辦法阻止模塊上傳到Nexus?
- 14. 有沒有辦法讓視頻觸發HTTP POST事件(或其他事件)
- 15. 有沒有辦法過濾jQuery中沒有觸發事件的匹配元素?
- 16. 有沒有辦法觸發一個沒有點擊事件的updatepanel?
- 17. 有沒有辦法阻止DataGridViewCheckBoxColumn自動檢查點擊?
- 18. 有沒有辦法阻止Azure存儲PutBlock方法超時?
- 19. Android:有沒有辦法停止在BootReceiver中觸發AlarmReceiver
- 20. 有沒有辦法阻止ColdFusion 11緩存Fusebox circuit.xml.cfm文件?
- 21. 有沒有辦法阻止.php文件被請求?
- 22. 有沒有辦法阻止一個SearchView小部件崩潰
- 23. WPF:NodeChanged事件沒有觸發
- 24. Dropzone.js事件沒有觸發
- 25. 沒有pagechange事件觸發
- 26. ASP.NET:onchange事件沒有觸發
- 27. GotFocus事件沒有觸發
- 28. C#事件沒有觸發
- 29. SubreportProcessing事件沒有觸發
- 30. RTCPeerConnection.ontrack事件沒有觸發
我相信你的意思是Unchecked event right? – 2010-07-22 03:16:00
對不起,Unchecked事件。 – 2010-07-22 03:33:00