Tôi có một nhóm Hộp kiểm WPF có trình xử lý sự kiện được kiểm tra xử lý một số logic khi người dùng nhấp vào một trong số đó. Tuy nhiên, tôi cũng có nút "Xóa tất cả", khi được nhấp, sẽ xóa tất cả các hộp kiểm. Nếu người dùng nhấp vào nút "Xóa tất cả", tôi KHÔNG muốn các hộp kiểm kích hoạt sự kiện Đã kiểm tra của họ. Có cách nào để làm điều này?Có cách nào để ngăn Hộp kiểm WPF kích hoạt sự kiện Đã kiểm tra của nó không?
Trả lời
Xóa trình xử lý sự kiện ở đầu trình xử lý sự kiện của nút Xóa tất cả và sau đó thêm trình xử lý sự kiện vào cuối trình xử lý sự kiện của nút Xóa tất cả.
Đây là một mẫu bẩn:
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>
Mã Đằng sau
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;
}
}
}
Cảm ơn, giải pháp này có vẻ hơi hack-ish nhưng có lẽ là cách tốt nhất để đi. Một giải pháp khả thi khác là giải pháp do Jeff cung cấp, để tạo một biến được kiểm tra để xem liệu nó có nên xử lý logic 'Đã kiểm tra' hay không. –
Sẽ là lý tưởng để vô hiệu hóa sự kiện nhưng tôi không biết điều đó sẽ được thực hiện như thế nào.
Mặc dù sẽ dễ dàng thêm một boolean để theo dõi xem nút "Xóa tất cả" đã được nhấn hay chưa. Sau đó, chỉ thực hiện kiểm tra mã nếu nó không được kiểm soát thông qua nút.
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
}
}
Đây là giải pháp khả thi, nhưng tôi muốn ngăn chặn việc phải tạo một biến khác nếu có thể. –
Bạn có thể sử dụng các sự kiện 'Nhấp vào' thay vì 'Kiểm tra' hoặc 'không được kiểm soát ' sự kiện.
'Nhấp' sẽ đảm bảo rằng thay đổi trạng thái sẽ đến từ đầu vào của người dùng (thông qua nút chuột hoặc thanh không gian chẳng hạn).
Và các hoạt động như cb.IsChecked = value
sẽ không kích hoạt sự kiện 'Nhấp'.
Hầu như quên điều đó! Nó thực sự có thể giải quyết vấn đề của tôi, cảm ơn! – Enrico
Chỉ là cảnh báo, Điều này không kích hoạt nếu thanh dấu cách được sử dụng cũng có thể chuyển đổi đầu vào hộp kiểm. –
- 1. Sự cố trong sự kiện Đã kiểm tra sự kiện
- 2. Sự kiện kích hoạt Jquery cho hộp kiểm
- 3. Bootstrap chuyển sự kiện đã kiểm tra?
- 4. Sự kiện JAVAFX được kích hoạt khi chọn hộp kiểm
- 5. Bắt sự kiện thay đổi đã kiểm tra của hộp kiểm
- 6. Sự kiện thay đổi kích hoạt jquery trên hộp kiểm
- 7. Kiểm tra sự kiện nào đã kích hoạt chức năng với jQuery?
- 8. Làm cách nào để nhận thay đổi kiểm tra sự kiện trên hộp kiểm android?
- 9. Ràng buộc hộp kiểm trong loại trực tiếp không hoạt động trên sự kiện kích hoạt
- 10. Cách đếm số hộp kiểm đã được kiểm tra
- 11. Cách ngăn chặn sự kiện đó trong trình kích hoạt kiểm soát khi biểu mẫu đóng
- 12. Cần sự kiện thay đổi hộp kiểm để phản hồi thay đổi trạng thái đã kiểm tra được lập trình
- 13. JavaScript - cách kiểm tra xem sự kiện đã được thêm
- 14. WPF: Hộp văn bản có sự kiện kích hoạt khi phím Enter được nhấn
- 15. Làm cách nào để ngăn sự kiện hộp kiểm mặc định ghi đè chức năng kiểm tra/bỏ chọn jQuery của tôi?
- 16. Kiểm tra đơn vị sự kiện COM?
- 17. Kiểm tra nếu hộp kiểm đã được kiểm tra trên tải sử dụng jQuery
- 18. Kiểm tra xem sự kiện có được kích hoạt bởi một con người
- 19. Kiểm tra sự kiện socket.io
- 20. jQuery/Javascript: Nhấp vào sự kiện trên một hộp kiểm và 'kiểm tra' thuộc tính
- 21. WPF: Làm cách nào để tạo hộp kiểm "pushlike"?
- 22. Làm cách nào để biết một hộp kiểm có thực sự được nhấp không?
- 23. Làm cách nào để đặt hộp kiểm mặc định là "đã kiểm tra" trong Rails 1.2.3?
- 24. Làm cách nào để kiểm tra xem một sự kiện đã được đăng ký, trong .NET?
- 25. jQuery kích hoạt (nghe tiếng 'click') không bắn kiện .click vào hộp kiểm
- 26. tôi đã thiết lập các hộp kiểm html tài sản false kiểm tra, nhưng nó vẫn kiểm tra
- 27. OnCheckedChanged xử lý sự kiện của asp: hộp kiểm không cháy khi hộp kiểm được bỏ chọn
- 28. Làm thế nào để có được kích thước của kiểm tra và khoảng cách trong hộp kiểm?
- 29. WPF: Hộp văn bản không kích hoạt sự kiệnTextInput
- 30. Làm cách nào để kiểm tra xem Trình tạo sự kiện JavaScript đã được đặt?
Tôi tin rằng bạn có nghĩa là sự kiện không được chọn phải không? –
Xin lỗi, sự kiện không được chọn. –