Tôi sẽ đánh giá cao nếu một số cơ thể có thể giải thích bằng một ví dụ đơn giản.Sự kiện được định tuyến là gì và sự khác biệt như thế nào so với các sự kiện bình thường
Trả lời
Hãy tưởng tượng một cửa sổ có chứa một hệ thống phân cấp dày đặc các điều khiển con. Bây giờ chúng ta hãy nói rằng bạn muốn làm một cái gì đó, có một nhấp chuột phải bất cứ nơi nào trong cửa sổ của bạn.
- Với sự kiện bình thường, bạn phải xử lý sự kiện Nhấp cho tất cả các điều khiển vì bạn không chắc chắn người dùng có thể nhấp vào.
- Với WP2's routed events, các sự kiện hoặc "bong bóng" hoặc "đường hầm" (nghĩa là di chuyển lên cây giao diện người dùng hoặc xuống) nếu họ không tìm thấy trình xử lý sự kiện, "xử lý" nó ở cấp hiện tại. Vì vậy, bạn có thể viết một trình xử lý cho sự kiện của cửa sổ, ví dụ: TopLevel. (WPF có quy ước về cặp sự kiện, PreviewXXX và XXX - sự kiện PreviewXXX kích hoạt đầu tiên và đường hầm xuống từ gốc để điều khiển nhận được kích thích và sự kiện XXX đối tác sau đó bật lên từ điều khiển con trở về gốc). Vì vậy, nếu bạn nhấp chuột phải vào một nút, WPF sẽ chuyển lên hệ thống phân cấp UI, gọi tất cả các trình xử lý mà nó tìm thấy (trừ khi ai đó đánh dấu sự kiện đã "xử lý" trong sự kiện args.)
Sự kiện định tuyến là sự kiện có nhiều hơn ' khả năng di chuyển ', như được đề cập trong câu trả lời Gishu's. sự kiện Routed được đại diện bởi một thể hiện của một lớp RoutedEvent + Sự kiện NET bình thường, mà kết thúc tốt đẹp nó:
public class MyClassWithARoutedEvent : UIElement
{
public static readonly RoutedEvent DoSomethingEvent;
public event RoutedEventHandler DoSomething
{
add { base.AddHandler (MyClassWithARoutedEvent.DoSomethingEvent, value);
remove { base.AddHandler (MyClassWithARoutedEvent.DoSomethingEvent, value);
}
}
Bạn thường sẽ sử dụng sự kiện mời chào trong tình huống như vậy:
- Thực hiện kiểm soát của riêng bạn mà liên tục tích hợp với cơ sở hạ tầng của WPF
- Sự kiện chế biến, được kích hoạt bởi các điều khiển khác nhau tại một gốc chung
- Phân loại thông tin liên lạc giữa các phần tử trong cây phần tử Trong hầu hết các trường hợp, bạn có thể Tôi có thể sử dụng cơ sở hạ tầng sự kiện định tuyến mà không hề chú ý đến nó.
Ngoài ra, điều đáng nói là bạn có thể sử dụng RoutedEvent trong tầm kiểm soát của mình ngay cả khi nó không xác định hoặc thậm chí thừa kế từ phần tử. Đó là bởi vì bạn thực sự có thể nghĩ về một cá thể RoutedEvent như một tên được đánh máy mạnh mẽ của một sự kiện. Vì vậy, nếu bạn có quyền truy cập vào 'tên' này (đây là lý do tại sao một trường hợp của một sự kiện được định tuyến thường được công khai), bạn có thể nợ nó:
- 1. WPF: Sự kiện định tuyến hoặc sự kiện thường xuyên?
- 2. Lịch Google - Hiển thị các sự kiện lặp lại như các sự kiện bình thường
- 3. Sự khác nhau giữa các sự kiện logic và sự kiện gốc trong GWT là gì?
- 4. Sự kiện UIButton. Có gì khác biệt?
- 5. Sự khác biệt giữa các sự kiện Bubbling và Tunneling
- 6. Sự khác biệt giữa các sự kiện Window.Loaded và Window.ContentRendered là gì
- 7. Sự khác biệt giữa "sự kiện DOMContent" và "sự kiện tải"
- 8. "Sự kiện MySQL" là gì?
- 9. SET so với CHỌN - Sự khác biệt là gì?
- 10. Sự khác biệt giữa Tải sự kiện, Kích hoạt sự kiện và Nhập sự kiện trong Biểu mẫu
- 11. Các sự kiện tĩnh so sánh với các sự kiện không tĩnh trong C# như thế nào?
- 12. Sự khác biệt giữa Trình xử lý sự kiện & Trình xử lý sự kiện trong Java là gì?
- 13. WPF: Sự kiện giữa sự kiện được khởi tạo và được tải là gì?
- 14. Sự khác biệt của Sự kiện và Khóa trong mô-đun luồng trăn là gì?
- 15. Sự kiện đồng thời dựa trên sự kiện là gì?
- 16. Sự khác biệt của việc đặt trình xử lý sự kiện trên thẻ HTML so với thẻ BODY là gì?
- 17. Sự kiện khóa định tuyến để điều khiển khác
- 18. C#: Sự kiện ảo là gì và chúng có thể được sử dụng như thế nào?
- 19. Sự khác biệt giữa tệp .so và .lo là gì?
- 20. Sự khác biệt giữa lớp tĩnh và lớp bình thường là gì?
- 21. Sự kiện so với Lợi nhuận
- 22. Sự khác biệt giữa đối tượng sự kiện và biến điều kiện
- 23. sự khác biệt giữa cấu trúc tĩnh và cấu trúc bình thường là gì?
- 24. EQU so với DC.B. Sự khác biệt là gì?
- 25. Xác định danh sách các trình xử lý sự kiện được liên kết với sự kiện
- 26. Sự khác biệt giữa html.AttributeEncode so với html.Encode là gì?
- 27. Sự khác biệt giữa get.chomp() so với STDIN.gets.chomp() là gì?
- 28. Sự kiện và sự kiện đã gửi của máy chủ Phát trực tuyến
- 29. Làm thế nào để đưa trình xử lý sự kiện vào các sự kiện với Unity
- 30. Ngăn sự kiện nhấp chuột sau sự kiện được tổ chức và sự kiện mouseup
Xem trước sự kiện là đường hầm, không sủi bọt. –
@John - Rất tiếc! wpf của tôi đã trở thành một chút gỉ. Cảm ơn bạn đã sửa ... cập nhật. – Gishu