RoutedEventArgs vs EventArgs

时间:2009-09-15 15:51:52

标签: .net wpf events routed-events

我正在学习WPF / Silverlight并在MS视频播放中看到现在建议使用RoutedEventArgs而不是EventArgs;虽然它没有确切说明原因。

我有一个win表单应用程序,它使用“小部件”的接口,试图不依赖于特定的显示技术(在Presenters / ViewModels中),所以如果我的IButton Click事件现在需要采用{{1}现在我猜它没那么有用。

有人可以解释我是否应该在所有情况下切换到RoutedEventArgs以及为什么?

顺便说一句,其他人是否有关于使用界面小部件的经验/意见,我正在描述它们?

3 个答案:

答案 0 :(得分:33)

嗯,基本上RoutedEvent遍历Logical树,从源元素到根元素(Bubble事件路由),或者从根元素到子级元素的频率较低(Tunnel事件路线)。这意味着,如果Button内有StackPanel,则其本身位于Grid内;如果你在控件中定义了一个Click事件,他们都将触发它,除非其中一个处理它。

如果事件路线为Bubble(命名为常规事件Click),则会显示:

Button -> StackPanel -> Grid

如果事件路线是Tunnel(名为PreviewClick),那么它将会反过来:

Grid -> StackPanel -> Button

现在使用处理,它非常简单。如果它是Bubble路由并且ButtonRoutedEventArgs.Handled设置为true,那么StackPanelGrid将不会触发它。与RoutedEvent相同,如果Grid处理它,StackPanelButton将不会触发它。

简而言之,这是我的理解,为了简单起见,我避免了一些事情。

我建议this chapter以便更好地理解此WPF功能。

答案 1 :(得分:3)

RoutedEventArgs是一种新类型的事件参数,用于支持事件的WPF模型:路由事件。很难在简短的条目中解释为什么WPF选择这个模型或者重点是什么,所以我首先会指出你关于这个主题的好文章。

答案 2 :(得分:0)

假设我们有一个包含其他元素的Button元素,StackPanel本身包含TextBox和Image元素。

Button元素应该能够处理点击事件,无论是点击的图像还是TextBox都是。

因此WPF提供了一种方法:

  • 大部分时间通过元素树传播事件冒泡 从源元素(这里是图像),到更高级别的根元素(例如这里的按钮)。
  • 处理此类传播事件。