2008-11-10 115 views
7

如何获取两个无关的控件来引发相同的自定义事件?到目前为止,我看到的所有例子都有一个事件定义在一个控件中,我应该采取不同的方法吗?WPF自定义路由事件问题

例如,我想从一个按钮和一个文本框的OnFocus处理程序中引发一个自定义冒泡事件。

回答

8

首先让我说你的问题没有说明你不想使用现有的UIElement.GotFocusEvent,但我会假设你知道它并且有你不使用它的理由。

您可以随时在静态类上注册一个自定义事件,并将其提升到任意位置。 Keyboard class会处理所有事件(例如Keyboard.KeyDownEvent)。

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

您像举办其他RoutedEvent一样提升事件。

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

如果您希望另一个班级将该活动作为公共字段拥有,那么您需要添加一个所有者。

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

谢谢。对不起,关于UIElement.GotFocusEvent是正确的假设。 – MJS 2008-11-10 20:22:00