事件路由
对逻辑树和可视树有所了解很有必要,因为路由事件主要是根据可视树进行路由。路由事件支持三种路由策略:气泡、隧道和直接。
气
泡事件:其操作的名称(例如,MouseDown)。
隧道事件:带有前缀 Preview(例如 PreviewMouseDown)。
直接事件:类似 .NET Framework 中的正常事件。该事件唯一可能的处理程序是与其挂接的委托。
通
常,如果为特殊事件定义了隧道事件,就会有相应的气泡事件。在这种情况下,隧道事件先触发,从根元素开始,下行至源元素,查找处理程序。一旦它被处理或到
达源元素,即会触发气泡事件,从源元素上行,查找处理程序。气泡或隧道事件不会仅因调用事件处理程序而停止路由。如果您想中止隧道或气泡进程,可使用您传
递的事件参数在事件处理程序中将事件标记为已处理。
private void OnChildElementMouseDown(object sender,
MouseButtonEventArgs e) {
e.Handled = true;
}
一
旦您的处理程序将事件标记为已处理,该事件便不会传给任何其他处理程序。这一论断只是部分正确。实际上,事件路由仍在继续起作用,您可利用
UIElement.AddHandler
的替换方法在代码中显式挂接事件处理程序,该方法有一个额外的标记,可以有效指出“即使事件被标记为已处理也可调用我”。您用类似如下所示的调用指定该标
记:
m_SomeChildElement.AddHandler(UIElement.MouseDownEvent,
(RoutedEventHandler)OnMouseDownCallMeAlways,true);
AddHandler 的第一个参数是您想要处理的
RoutedEvent。第二个参数是对事件处理方法(它需要有事件委托的正确签名)的委托。第三个参数指明如果另一个处理程序已将事件标记为已处理,您
是否想得到通知。您调用 AddHandler 的元素就是在路由期间观察事件流动的元素。
路由事件和组合
现在我们来看一看 Button.Click 事件的形成过程,以了解为什么它如此重要。如前所述,用户将对 Button 可视树中的某些子元素(例如上一示例中的 Image)使用 MouseLeftButtonDown 事件启动 Click 事件。
在 Image 元素内发生
MouseLeftButtonDown 事件时,PreviewMouseLeftButtonDown 在根元素启动,然后沿隧道下行至
Image。如果没有处理程序为 Preview 事件将 Handled 标记设置为 True,MouseLeftButtonDown 即会从
Image 元素开始向上传播,直至到达 Button。按钮处理这一事件,将 Handled 标记设为 True,然后引发其自身的 Click
事件。本文中的示例代码包括一个应用程序,它带有整个路由链挂接的处理程序,可帮您查看这一进程。
其 蕴含的意义不可小视。例如,如果我选择通过应用包含
Ellipse 元素的控件模板替换默认按钮外观,可以保证在 Ellipse 外部单击即可触发 Click 事件。靠近 Ellipse
的外缘单击仍处于 my button 的矩形边界内,但 Ellipse 有其自身的 MouseLeftButtonDown 击中检测,而
Ellipse 外部按钮的空白区域则没有。
因 此,只有在 Ellipse 内部的单击才会引发
MouseLeftButtonDown 事件。它仍由附加此模板的 Button
类进行处理,所以,即便是自定义的按钮,您也能得到预测的行为。在编写自己自定义的复合控件时也需牢记这一非常重要的概念,因为您的操作很可能类似
Button 对控件内子元素的事件处理。
分享到:
相关推荐
路由事件允许事件在UI元素树中传播,而附加属性则是XAML中定义非继承属性的方式,它们扩展了WPF的灵活性。 **国际化与本地化** WPF支持多语言应用,通过资源字典和CultureInfo对象,开发者可以轻松实现应用程序的...
此外,书中还会涉及事件处理机制,这是用户交互的核心,包括基本事件和路由事件的使用。 色彩和视觉效果是WPF的一大亮点。书中将探讨绘图和渲染技术,包括画刷、笔刷、形状和路径,以及动画和转换,这些都是创建...
8. **事件处理**:WPF的事件模型基于依赖属性,提供简便的事件订阅和处理方式,支持事件路由和事件参数。 9. **多线程支持**:WPF提供了Dispatcher机制,使得在UI线程外执行操作变得可能,避免了UI的阻塞,提高了...
10. **Chapter23**:可能探讨了WPF的路由事件和事件总线,这些对于实现组件之间的通信非常有用。 每个章节的源码示例都是对相应WPF概念的实践演示,通过学习和分析这些代码,读者可以加深对WPF编程的理解,掌握如何...
- **路由事件**: 这是一种特殊的事件处理模型,可以实现事件的冒泡和隧道行为,从而简化复杂的事件处理逻辑。 #### 五、WPF的应用程序架构 在WPF中,外观和行为是分离的。这意味着标记文件(通常以XAML编写)负责...
此外,可能还会涉及命令、事件和路由事件,这些都是WPF中处理用户输入和应用逻辑的关键。 **第五章:资源、样式和模板** 资源是WPF中复用UI元素和设置的关键,可以显著提高代码的可维护性。样式定义了控件的默认...
9. 事件处理:理解WPF事件模型,包括路由事件和依赖属性变更事件,以及如何使用事件处理程序进行交互。 10. 多线程和异步编程:在WPF中,多线程和异步操作对于提升用户体验至关重要。学习如何正确地管理UI线程和...
8. **路由事件和命令**:学习如何使用路由事件传播事件,以及如何实现MVVM(Model-View-ViewModel)模式中的命令。 9. **动画和转换**:理解动画和转换的概念,如何为用户界面添加动态效果。 10. **布局系统**:...
本教程将探讨WPF Control的核心概念,包括其与Win32、MFC、WinForm的比较,以及WPF的路由事件模型、渲染模型、内容模型、MVC模型,还有常用的WPF控件,以及用户控件和自定义控件的差异。 ### 1. WPF Control 与 Win...
WPF事件机制包括常规事件和路由事件。路由事件允许一个控件的事件被其他控件捕获,提供了更灵活的事件处理方式。 8. **图形和动画** WPF支持2D和3D图形绘制,提供丰富的图形API。动画系统则可以为UI元素添加动态...
在给定的项目“WpfApplication5_4”中,我们可以深入探讨一个关键概念——路由事件(Routing Event)。路由事件是WPF中事件处理机制的一个重要特性,它允许事件在元素树中传播,为开发人员提供了更大的灵活性和控制...
通过这个简单的拼图游戏项目,开发者可以深入理解WPF的基本结构、XAML的语法、路由事件的使用以及WPF中的数据绑定和UI更新机制。此外,还能锻炼到布局设计、事件处理和基本的图片处理技能。对于WPF初学者来说,这是...
1. **事件路由机制**:WPF中的事件有两种路由方式——冒泡和隧道。冒泡事件从最底层的元素开始,然后逐级向上,直到到达父元素;而隧道事件则相反,从根元素开始,向下传递到子元素。预览事件多采用隧道模式,可以让...
**WPF编程宝典——使用C#2012和.NET4.5源码** Windows Presentation Foundation(WPF)是Microsoft开发的一种用户界面框架,它为构建桌面应用程序提供了丰富的功能和设计灵活性。在《WPF编程宝典》一书中,作者深入...
- 路由事件是WPF中的一种事件处理模型,允许事件在DOM树中向上或向下传递。 - 这种机制使得事件处理更为灵活。 5. **命令**: - 命令是WPF中用于执行特定操作的对象,通常与控件的命令绑定相结合。 - 通过命令...
12. **命令和路由事件**:命令模式是WPF中处理用户操作的一种常见方式,它将用户界面与业务逻辑解耦。路由事件则是可以在整个元素树中传播的事件,允许子元素响应父元素的事件。 通过分析和研究WPF揭秘_code中的...
除了传统的事件处理方法,WPF还引入了事件路由和命令模式,使得事件处理更加灵活且符合MVVM(Model-View-ViewModel)设计模式。 至于文档处理,WPF支持流内容和固定内容两种模式,可以创建和显示复杂的文档,如报告...
7. **依赖属性和路由事件**:这两个特性是WPF框架的关键组成部分,它们增强了组件之间的交互和通信。书中会详细阐述依赖属性的工作原理和路由事件的使用方式。 8. **MVVM设计模式**:Model-View-ViewModel(MVVM)...