2008-11-10 29 views
7

Làm cách nào để bạn có hai điều khiển không liên quan để tăng cùng một sự kiện tùy chỉnh? Tất cả các ví dụ tôi đã thấy cho đến nay có một sự kiện được xác định trong một điều khiển duy nhất, tôi có nên sử dụng một cách tiếp cận khác không?Câu hỏi sự kiện được định tuyến tùy chỉnh WPF

Ví dụ: Tôi muốn tăng sự kiện bubbling tùy chỉnh từ trình xử lý OnFocus cho nút và hộp văn bản.

Trả lời

8

Trước hết hãy để tôi nói câu hỏi của bạn không rõ ràng là bạn không muốn sử dụng UIElement.GotFocusEvent hiện có, nhưng tôi sẽ giả sử bạn biết và có lý do bạn không sử dụng nó.

Bạn luôn có thể đăng ký sự kiện tùy chỉnh trên một lớp tĩnh và nâng cao nó ở bất cứ đâu bạn muốn. Keyboard class thực hiện với tất cả các sự kiện của nó (ví dụ: Keyboard.KeyDownEvent).

public static class RoutedEventUtility 
{ 
    public static readonly RoutedEvent MyCustomEvent = EventManager.RegisterRoutedEvent("MyCustomEvent", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(RoutedEventUtility)); 
} 

Bạn tăng sự kiện giống như bất kỳ RoutedEvent nào khác.

RoutedEventArgs args = new RoutedEventArgs(RoutedEventUtility.MyCustomEvent); 
RaiseEvent(args); 

Nếu bạn muốn lớp khác sở hữu sự kiện dưới dạng trường công cộng thì bạn sẽ cần thêm chủ sở hữu.

public class MyCustomControl : Control 
{ 
    public static readonly RoutedEvent MyCustomEvent = RoutedEventUtility.MyCustomEvent.AddOwner(typeof(MyCustomControl)); 
} 
+0

Cảm ơn. Xin lỗi, có giả định chính xác về UIElement.GotFocusEvent. – MJS

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