Trong WPF, chúng tôi đã định tuyến các sự kiện. Khi nào những thứ này nên được sử dụng thay vì các sự kiện thông thường?WPF: Sự kiện định tuyến hoặc sự kiện thường xuyên?
Trả lời
Sự kiện định tuyến có hành vi đặc biệt, nhưng hành vi đó phần lớn là vô hình nếu bạn đang xử lý sự kiện trên phần tử được tăng lên.
Trường hợp các sự kiện định tuyến trở nên mạnh mẽ là bạn sử dụng bất kỳ trường hợp được đề xuất nào: xác định trình xử lý phổ biến ở gốc chung, kết hợp điều khiển của riêng bạn hoặc xác định lớp điều khiển tùy chỉnh của riêng bạn.
Trình xử lý sự kiện định tuyến và nguồn sự kiện được định tuyến không cần chia sẻ sự kiện phổ biến trong cấu trúc phân cấp của chúng. Bất kỳ UIElement hoặc ContentElement nào đều có thể là trình xử lý sự kiện cho bất kỳ sự kiện được định tuyến nào. Do đó, bạn có thể sử dụng tập hợp đầy đủ các sự kiện được định tuyến có sẵn trong suốt bộ API làm việc như một "giao diện" khái niệm, nhờ đó các phần tử khác nhau trong ứng dụng có thể trao đổi thông tin sự kiện. Khái niệm "giao diện" này cho các sự kiện định tuyến được áp dụng đặc biệt cho các sự kiện đầu vào.
Sự kiện định tuyến cũng có thể được sử dụng để giao tiếp thông qua cây phần tử, vì dữ liệu sự kiện cho sự kiện được duy trì cho từng phần tử trong tuyến đường. Một phần tử có thể thay đổi thứ gì đó trong dữ liệu sự kiện và thay đổi đó sẽ có sẵn cho phần tử tiếp theo trong tuyến đường.
Khác với khía cạnh định tuyến, có hai lý do khác mà bất kỳ sự kiện WPF đã cho nào có thể được triển khai dưới dạng sự kiện định tuyến thay vì sự kiện CLR chuẩn. Nếu bạn đang thực hiện các sự kiện riêng của bạn, bạn cũng có thể xem xét những nguyên tắc này:
- Một số WPF tạo kiểu tóc và khuôn mẫu các tính năng như EventSetter và EventTrigger đòi hỏi sự kiện tham chiếu là một sự kiện chuyển. Đây là kịch bản định danh sự kiện được đề cập trước đó.
- Các sự kiện định tuyến hỗ trợ cơ chế xử lý lớp theo đó lớp có thể chỉ định các phương thức tĩnh có cơ hội xử lý các sự kiện định tuyến trước khi bất kỳ trình xử lý cá thể đã đăng ký nào có thể truy cập chúng. Điều này rất hữu ích trong thiết kế điều khiển, bởi vì lớp của bạn có thể thực thi các hành vi lớp theo hướng sự kiện mà không thể vô tình bị đè nén bằng cách xử lý một sự kiện trên một cá thể.
Nguồn: MSDN: Routed Events Overview
Trong thành phần kiểm soát WPF là rất cao sử dụng. có nhiệm vụ sử dụng sự kiện định tuyến, vì thành phần của bộ điều khiển chỉ hiển thị hoạt động đơn lẻ phần lớn thời gian.
- 1. Sự kiện định tuyến dừng Wpf khi MessageBox xuất hiện?
- 2. Câu hỏi sự kiện được định tuyến tùy chỉnh WPF
- 3. Sự kiện Bubbling cho Sự kiện tùy chỉnh trong WPF?
- 4. WPF ListBox OnScroll Sự kiện
- 5. Sự kiện khóa định tuyến để điều khiển khác
- 6. 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
- 7. Sự kiện định tuyến tùy chỉnh WPF - Cách hủy đăng ký?
- 8. Có cách nào để xem các Sự kiện Định tuyến WPF không?
- 9. Nâng cao WPF MouseLeftButtonDownEvent sự kiện
- 10. Sự kiện Cronjob hoặc MySQL?
- 11. Nhấp và kéo chuột Sự kiện WPF
- 12. Sự kiện và sự kiện đã gửi của máy chủ Phát trực tuyến
- 13. Sự kiện nhấp hoãn sự kiện
- 14. WPF canvas VisibilityThay đổi sự kiện
- 15. Xử lý sự kiện thoát khỏi WPF
- 16. Tạo sự kiện wpf tuỳ chỉnh
- 17. WPF: Canvas Sự kiện Không làm việc
- 18. Sự kiện KeyPress tương đương trong WPF
- 19. 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
- 20. Truyền dữ liệu sự kiện trong trình xử lý sự kiện nội tuyến
- 21. WPF: Sự kiện giữa sự kiện được khởi tạo và được tải là gì?
- 22. logic sự kiện định kỳ
- 23. Lệnh Sourcing Sự kiện vs Sự kiện
- 24. Sự cố trong sự kiện Đã kiểm tra sự kiện
- 25. Sự kiện Phonegap trực tuyến/ngoại tuyến không hoạt động
- 26. Các sự kiện Jquery .bind được kích hoạt khi chụp sự kiện hoặc bong bóng sự kiện
- 27. WPF - Sắp xếp sự kiện bố cục được lặp lại
- 28. Xác định sự kiện nhấp cho UISegmentedControl
- 29. Sự kiện cho "DataContextChanging"?
- 30. Sự kiện đã thay đổi hướng sự kiện hoặc người nghe Android
Jahedbozorgan: cảm ơn câu trả lời rất toàn diện của bạn. Tôi nhận thấy rằng bạn đã đề cập đến một nguồn trong câu trả lời. Nhưng tôi đã tự hỏi nếu có những cuốn sách khác mà nói về RoutedEvents cụ thể. Nếu bạn đã gặp phải bất kỳ điều gì, hãy chia sẻ chúng. – gprasant