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.
分享到:
相关推荐
WPF中的事件分为两种类型:**常规事件(Tunneling Events)**和**冒泡事件(Bubbling Events)**,它们都是路由事件的子类。 - **隧道事件(Preview Events)**:也称为预览事件,它们首先在元素树的根部触发,然后...
1. **事件路由机制**:WPF中的事件有两种路由方式——冒泡和隧道。冒泡事件从最底层的元素开始,然后逐级向上,直到到达父元素;而隧道事件则相反,从根元素开始,向下传递到子元素。预览事件多采用隧道模式,可以让...
在WPF中,处理键盘输入主要依赖于`System.Input.Keyboard`类,它提供了关于键盘状态的事件、方法和属性。键盘输入事件主要分为两组: 1. **KeyDown** 和 **PreviewKeyDown** 事件:这两个事件在用户按下键盘按键时...
例子将展示如何响应这些事件,编写事件处理函数,并理解事件冒泡和事件隧道。 6. **资源字典**:资源字典可以集中管理应用程序的样式、颜色、 brushes等,提高代码复用。例子中可能涉及如何创建和引用资源字典,...
10. **事件路由**:WPF中的事件路由包括直接、隧道和冒泡三种方式,图片查看器中的鼠标事件处理可能涉及这些路由机制。 11. **图像处理**:除了基本的显示功能,图片查看器可能还包含图像的旋转、裁剪等高级功能,...
- **事件模式**:路由事件有三种模式:Bubble(冒泡)、Tunnel(隧道)和Direct(直接)。这些模式定义了事件如何在元素之间传播。 - **事件处理策略**:通过选择不同的事件模式,开发者可以灵活地控制事件的处理...
2.3 XAML中的属性和事件 24 2.3.1 简单属性与类型转换器 25 2.3.2 复杂属性 26 2.3.3 标记扩展 28 2.3.4 附加属性 29 2.3.5 嵌套元素 30 2.3.6 特殊字符与空白 32 2.3.7 事件 34 2.3.8 完整的Eight Ball Answer示例 ...
2.3 XAML中的属性和事件 24 2.3.1 简单属性与类型转换器 25 2.3.2 复杂属性 26 2.3.3 标记扩展 28 2.3.4 附加属性 29 2.3.5 嵌套元素 30 2.3.6 特殊字符与空白 32 2.3.7 事件 34 2.3.8 完整的Eight Ball Answer示例 ...