RoutedEventArgs 与 EventArgs
-
07-07-2019 - |
题
我正在学习 WPF / Silverlight,并在 MS vidcast 中看到现在推荐使用它 RoutedEventArgs
超过 EventArgs
;虽然它没有具体说明原因。
我有一个 win 表单应用程序,它使用“小部件”接口,试图不与特定的显示技术(在 Presenters / ViewModels 中)绑定,所以如果我的 IButton Click 事件现在需要采取 RoutedEventArgs
现在我想它没那么有用了。
有人可以解释一下我是否应该切换到 RoutedEventArgs
在所有情况下,为什么?
顺便说一句,还有其他人有关于使用我所描述的界面小部件的经验/意见吗?
解决方案
好吧,基本上 RoutedEvent
遍历逻辑
树,从源元素到根元素( Bubble
事件路径)或者,从根元素到子级元素( Tunnel
事件路径)的频率较低。这意味着如果在 StackPanel
中有 Button
,那么它本身就在 Grid
之内;如果在控件中定义 Click
事件,除非其中一个处理,否则它们都将触发它。
如果事件路径是 Bubble
(命名为常规事件 Click
),它将会:
按钮 - > StackPanel - >格代码>
如果事件路径是 Tunnel
(名为 PreviewClick
),它将反过来:
网格 - > StackPanel - >按钮代码>
现在使用处理,它非常简单。如果它是 Bubble
路由并且 Button
将 RoutedEventArgs.Handled
设置为true,那么 StackPanel
和网格
不会触发它。与 RoutedEvent
相同,如果 Grid
处理它, StackPanel
和 Button
将不会触发它。
简而言之,这是我的理解,为了简单起见,我避免了一些事情。
我建议本章为了更好地理解这个WPF功能。
其他提示
RoutedEventArgs 是一种新型事件参数,它的存在是为了支持 WPF 事件模型:路由事件。很难在简短的条目中解释为什么 WPF 到底选择了这个模型或者其意义是什么,所以我将首先向您介绍一篇关于该主题的好文章。
假设我们有一个包含其他元素的 Button 元素,一个 StackPanel,它本身包含一个 TextBox 和一个 Image 元素。
Button 元素应该能够处理单击事件,无论单击的是 Image 还是 TextBox。
因此 WPF 提供了一种方法:
- 通过元素树传播事件,大部分时间都从源元素(这里说图像)到更高的级别向根元素(例如,此处的按钮)。
- 处理此类传播事件。