我正在学习 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 提供了一种方法:

  • 通过元素树传播事件,大部分时间都从源元素(这里说图像)到更高的级别向根元素(例如,此处的按钮)。
  • 处理此类传播事件。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top