.
3ss.cn

WPF自定义路由事件之自定义路由事件

下面我们就来根据以上语法,基于ButtonBase创建自己的Click路由事件:

public class MyRoutedEventArgs : RoutedEventArgs
{
public MyRoutedEventArgs(RoutedEvent routedEvent, object source)
: base(routedEvent, source) { }public string RoutedMessage { get; set; }
}public class MyButton : ButtonBase
{public static readonly RoutedEvent MessageEvent =
 EventManager.RegisterRoutedEvent("Message", RoutingStrategy.Bubble,
 typeof(EventHandler<MyRoutedEventArgs>), typeof(MyButton));public event RoutedEventHandler Message
{
add { this.AddHandler(MessageEvent, value); }
remove { this.RemoveHandler(MessageEvent, value); }
}protected override void OnClick()
{
base.OnClick();MyRoutedEventArgs eventArgs =new MyRoutedEventArgs(MessageEvent, this) 
{ RoutedMessage = "自定义路由事件被触发了" };
this.RaiseEvent(eventArgs);} 
}

上述代码中,我创建了一个MyButton,声明了一个MessageEvent路由事件对象,值得注意的是,RegisterRoutedEvent的第三个参数我用的是:

typeof(EventHandler<MyRoutedEventArgs>)

而非:

typeof(RoutedEventHandler)

因为RoutedEventHandler的参数跟我自定义的事件参数不一致,需要使用EventHandler的泛型版指定我的事件参数类型,下面是RoutedEventHandler的声明:

该参数类型是RoutedEventArgs,而我使用的是自定义的MyRoutedEventArgs类型。

XAML部分及事件处理器的代码为:

在外层Grid上设置MyButton的Message事件监听及处理器。

运行效果如下:

点击“你好”,弹出MessageBox提示“自定义路由事件被触发了”。

赞(0)
未经允许不得转载:互联学术 » WPF自定义路由事件之自定义路由事件

评论 抢沙发