路由事件

为.net事件添加了一些基础的东西。是专门设计在元素树上的事件,当路由事件触发以后,它可能向上或向下遍历元素树,用一个简单而持久的方式在每个元素上触发,而不需要使用任何的定制代码。它和依赖属性有些相似。

路由事件的名称写法:RoutedEvent 而Event必须的。

路由事件也分3种传递方式:简称路由策略

路由策略:遍历整个元素树的方式,是由RoutingStrategy枚举提供

1,         Tunneling管道传递:从根元素被触发,然后从每一个元素向下传递,直到到达源元素为止。(或者直接处理程序把事件记为己处理为止)。前缀为previe .一般在冒泡事件前被触发。

2,         Bubbling 冒泡传递:事件首先在源元素被触发,然后沿着每一个元素向上传递,直达根元素为止。(或者直接处理程序把事件标记为己处理为止)

3,         Direct 直接传递: 事件仅在源元素上触发。这事件会参与路由事件的特定机制,如事件触发器。

路由事件处理程序有一个签名,第一个参数System.Object sender

第二个参数是:System.EventArgs e  

Sender负责传递给事件处理程序,就是被添加到的元素。

参数 e 是RoutedEventArgs的一个实例是EventArgs的一个子类,提供了4个属性。

E参数的4个属性:

1,Source : 逻辑树中一开始触发的事件元素。

2,OriginalSource : 可视树中一开始触发该事件的元素。

3,Handled : 布尔值,设置为true表示标记事件为己处理,这就是用于停止Tunneling或Bubbling的标记。

4,         RoutedEvent : 真正的路由事件对象,当一个事件处理程序同时被多个路由事件时,它可以有效地识别被触发事件。

n       路由事件实现

Public class button:ButtonBase

{

   //路由事件

   Public static readonly RoutedEvent ClickEvent;

   static Button()

   {

     //注册事件

     Button.ClickEvent=EventManager.RegisterRoutedEvent

(“Click”,RoutingStrategy.Bubble,typeof(RoutedEventHandler),typeof(Button));

}

   //.net事件包装器(可选)

   Public event RoutedEventHandler Click

   {

     Add{AddHandler(Button.ClickEvent,value);}

     Remove{ RemoveHandler(Button.ClickEvent,value)}

}

Protected override void OnMouseLeftButtonDown(

MouseButtonEventArgs e

)

{

   //触发事件

RaiseEvent(new RoutedEventArgs(button.ClickEvent,this));

}

}

包装器里的2个方法没有继承DependencyObject,而是继承了

System.windows.UIElement.  这些方法可以向路由事件添加或者移除委托。

 

有理解不对的地方,希望各位指教!谢过!

转载于:https://www.cnblogs.com/Inspirations/archive/2012/09/28/2706561.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值