WPF中的事件及冒泡事件和隧道事件(预览事件)的区别

WPF 的采取了路由事件机制,这样事件可以在可视树上层级传递。要知道 XAML 中控件都是由很多其他元素组合而成,比如我们单击了 Button 内部的 TextBlock 元素,Button 依然可以可以接收到该事件并触发 Button.Click。通常情况下,我们只是关心逻辑树上的事件过程。

1)创建

public abstract class ButtonBase : ContentControl, ICommandSource
{
  public static readonly RoutedEvent ClickEvent;
  static ButtonBase()
  {
    ClickEvent = EventManager.RegisterRoutedEvent("Click", RoutingStrategy.Bubble, 
      typeof(RoutedEventHandler), typeof(ButtonBase));
    ......
  }
  public event RoutedEventHandler Click
  {
    add { base.AddHandler(ClickEvent, value); }
    remove { base.RemoveHandler(ClickEvent, value); }
  }
}

2)类型

注册路由事件时,我们可以选择不同的路由策略。

  管道传递(Tunneling): 事件首先在根元素上触发,然后向下层级传递,直到那个最初触发事件的子元素。

  冒泡(Bubbling): 事件从最初触发事件的子元素向根元素层级往上传递。

  直接(Direct): 事件仅在最初触发事件的子元素上触发。

 <Border MouseRightButtonDown="MouseRightButtonDown" >

<StackPanel MouseRightButtonDown="MouseRightButtonDown"> 

<Button MouseRightButtonDown="MouseRightButtonDown" >Test</Button>

 </StackPanel>

 </Border>

当点击Button,弹出三个对话框,在按钮上单击右键后,你会依次看到显示 "Button"、"StackPanel"、"Border" 的三个对话框,显然事件按照冒泡向根元素传递。

通常情况下,WPF 控件会在管道事件的名称前添加 Preview 前缀。

3)附加事件

、和附加属性类似,WPF 允许我们在一个没有定义事件的元素上处理经管道或冒泡传递的路由事件。

4) Routed Events主要为键盘,鼠标等输入设备准备的。

 

 

Routed Commands包括:

ApplicationCommands, which contains things like Cut/Copy/Paste.
MediaCommands, which contains things like BoostBass/ChannelUp/ChannelDown/MuteVolume.
NavigationCommands, which contains things like BrowseBack/BrowseForward/Favorites.
ComponentCommands, which contains things like MoveDown/MoveFocusPageUp/MoveToEnd.
EditingCommands, which contains things like AlignCenter/Backspace/Delete.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值