2009-09-15 18 views
15

Tôi đang học WPF/Silverlight và thấy trong một vidcast MS rằng bây giờ bạn nên sử dụng RoutedEventArgs trên EventArgs; mặc dù nó không nói chính xác tại sao.RoutedEventArgs vs EventArgs

Tôi có ứng dụng biểu mẫu giành chiến thắng sử dụng giao diện cho "tiện ích" trong nỗ lực không được gắn với công nghệ hiển thị cụ thể (trong Trình bày/Chế độ xem), vì vậy nếu sự kiện IButton Click của tôi hiện cần phải lấy số RoutedEventArgs bây giờ tôi đoán nó không hữu ích.

Ai đó có thể vui lòng giải thích nếu tôi nên chuyển sang RoutedEventArgs trong mọi trường hợp và tại sao?

Như một sang một bên, có ai khác có kinh nghiệm/ý kiến ​​về việc sử dụng các widget giao diện như tôi mô tả chúng không?

Trả lời

32

Vâng, cơ bản là một RoutedEvent chuyến đi qua cây Logical, hoặc từ các yếu tố nguồn để nhổ tận gốc nguyên tố (Bubble đường sự kiện) hoặc, ít thường xuyên từ phần tử gốc đến các yếu tố cấp địa (Tunnel tuyến sự kiện). Điều này có nghĩa là nếu bạn có một Button bên trong của một StackPanel, chính nó là bên trong một Grid; nếu bạn xác định sự kiện Click trong các điều khiển, tất cả chúng sẽ kích hoạt sự kiện trừ khi một trong số chúng xử lý.

Nếu con đường sự kiện là Bubble (đặt tên như một sự kiện thường xuyên Click), nó sẽ đi:

Button -> StackPanel -> Grid

Nếu con đường sự kiện được Tunnel (tên PreviewClick), nó sẽ đi theo con đường khác xung quanh :

Grid -> StackPanel -> Button

Vì vậy, bây giờ với xử lý, đó là khá đơn giản. Nếu đó là tuyến đường BubbleButton đặt RoutedEventArgs.Handled thành true, StackPanelGrid sẽ không kích hoạt. Tương tự với RoutedEvent, nếu Grid xử lý, StackPanelButton sẽ không kích hoạt.

Đây là hiểu biết của tôi tóm lại, tôi đã tránh một số nội dung để đơn giản.

Tôi khuyên bạn nên this chapter để hiểu rõ hơn về tính năng WPF này.

+2

Đầu tôi đau = ( – Coops

+1

@CodeBlend không đau đớn, không đạt được! – Carlo

+1

Giải thích đơn giản và ngắn gọn. Trong trường hợp nào bạn cần sử dụng sự kiện Đường hầm? Tôi không thể nghĩ ra bất kỳ cách sử dụng thực tế nào. –

1

RoutedEventArgs là một loại đối số sự kiện mới tồn tại để hỗ trợ mô hình sự kiện WPF: Sự kiện định tuyến. Thật khó để giải thích trong một mục ngắn lý do tại sao chính xác WPF đã chọn mô hình này hoặc những gì là điểm vì vậy tôi sẽ bắt đầu bằng cách chỉ cho bạn một bài viết tốt về chủ đề này.

0

Giả sử chúng ta có phần tử Nút chứa các phần tử khác, một StackPanel, chính nó chứa một TextBox và phần tử Hình ảnh.

Phần tử Nút sẽ có thể xử lý sự kiện nhấp chuột bất kể Hình ảnh đã được nhấp hay chưa.

Do đó WPF cung cấp một cách để:

  • Tuyên truyền một sự kiện thông qua cây yếu tố phần lớn thời gian bọt từ các yếu tố nguồn (ở đây nói Image), đến một mức độ cao hơn về phía phần tử gốc (ví dụ nút ở đây).
  • Xử lý sự kiện được truyền bá như vậy.
Các vấn đề liên quan