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

有帮助吗?

解决方案

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

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

路由事件侦听器和路由事件源不需要在其层次结构中共享公共事件。任何 用户界面元素 或者 内容元素 可以是任何路由事件的事件侦听器。因此,您可以使用整个工作 API 集中可用的全套路由事件作为概念“接口”,应用程序中的不同元素可以通过该接口交换事件信息。路由事件的这种“接口”概念特别适用于输入事件。

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

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

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

来源: 微软软件定义网络:路由事件概述

其他提示

在WPF中,控制组合物被高度使用。它要求使用Routed事件,因为控件集的组合大部分时间都会暴露单个活动。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top