2009-05-03 36 views

Trả lời

12

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ư EventSetterEventTrigger đò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

+0

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

0

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.

Các vấn đề liên quan