21

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

我有一个 win forms 应用程序,它使用“小部件”接口,试图不绑定到特定的显示技术(在 Presenters / ViewModels 中),所以如果我的 IButton Click 事件现在需要采取RoutedEventArgs现在我猜它不是一样有用。

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

顺便说一句,在我描述的时候,还有其他人有关于使用界面小部件的经验/意见吗?

4

3 回答 3

38

好吧,基本上 aRoutedEvent遍历Logical树,从源元素到根元素(Bubble事件路由),或者从根元素到子级别元素(Tunnel事件路由)的频率较低。这意味着如果你有 a 的Button内部StackPanel,那它本身就在 a 的内部Grid;如果您在控件中定义一个事件,除非其中一个处理Click它,否则它们都会触发它。

如果事件路由是Bubble(命名为常规事件Click),它将去:

Button -> StackPanel -> Grid

如果事件路由是Tunnel(命名PreviewClick的),它会反过来:

Grid -> StackPanel -> Button

所以现在有了处理,这很简单。如果它是一条Bubble路线并且将其Button设置RoutedEventArgs.Handled为 true,StackPanelGrid不会触发它。与 相同RoutedEvent,如果Grid处理它,StackPanelButton不会触发它。

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

我推荐本章以便更好地理解这个 WPF 特性。

于 2009-09-15T18:06:51.340 回答
3

RoutedEventArgs 是一种新类型的事件参数,用于支持 WPF 事件模型:路由事件。很难在简短的文章中解释 WPF 选择这个模型的确切原因或意义何在,所以我将首先为您指出一篇关于该主题的好文章。

于 2009-09-15T15:56:46.937 回答
0

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

Button 元素应该能够处理单击事件,无论是单击了 Image 还是单击了 TextBox。

因此 WPF 提供了一种方法:

  • 大部分时间通过元素树传播一个事件,从源元素(这里说图像)冒泡到根元素的更高级别(例如这里的按钮)。
  • 处理这样的传播事件。
于 2017-03-14T16:02:56.350 回答