11

在 WPF 中,我们有路由事件。什么时候应该使用这些来代替常规活动?

4

2 回答 2

11

路由事件有特殊的行为,但如果您在引发它的元素上处理事件,则该行为在很大程度上是不可见的。

如果您使用任何建议的场景,路由事件变得强大的地方:在公共根中定义公共处理程序,合成您自己的控件,或定义您自己的自定义控件类。

路由事件侦听器和路由事件源不需要在其层次结构中共享公共事件。任何UIElementContentElement都可以是任何路由事件的事件侦听器。因此,您可以将整个工作 API 集中可用的全套路由事件用作概念“接口”,从而应用程序中的不同元素可以交换事件信息。这种用于路由事件的“接口”概念特别适用于输入事件。

路由事件也可用于通过元素树进行通信,因为事件的事件数据被永久保存到路由中的每个元素。一个元素可以更改事件数据中的某些内容,并且该更改将可用于路由中的下一个元素。

除了路由方面,还有其他两个原因可以将任何给定的 WPF 事件实现为路由事件而不是标准 CLR 事件。如果您正在实现自己的事件,您还可以考虑以下原则:

  • 某些 WPF 样式和模板功能(例如EventSetterEventTrigger )要求引用的事件是路由事件。这就是前面提到的事件标识符场景。
  • 路由事件支持类处理机制,类可以指定静态方法,这些方法有机会在任何注册的实例处理程序可以访问它们之前处理路由事件。这在控件设计中非常有用,因为您的类可以强制执行事件驱动的类行为,这些行为不会通过处理实例上的事件而被意外抑制。

来源:MSDN:路由事件概述

于 2009-05-03T05:17:50.317 回答
0

在 WPF 控件组合中被高度使用。它要求使用路由事件,因为一组控件的组合在大多数情况下都会暴露单个活动。

于 2010-07-15T17:31:59.337 回答