WPF:路由事件还是常规事件?

发布于 2024-07-18 21:10:15 字数 43 浏览 4 评论 0原文

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

In WPF we have routed events. When should these be used instead of regular events?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

北斗星光 2024-07-25 21:10:15

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

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

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

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

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

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

来源:MSDN:路由事件概述

Routed events have special behavior, but that behavior is largely invisible if you are handling an event on the element where it is raised.

Where routed events become powerful is if you use any of the suggested scenarios: defining common handlers at a common root, compositing your own control, or defining your own custom control class.

Routed event listeners and routed event sources do not need to share a common event in their hierarchy. Any UIElement or ContentElement can be an event listener for any routed event. Therefore, you can use the full set of routed events available throughout the working API set as a conceptual "interface" whereby disparate elements in the application can exchange event information. This "interface" concept for routed events is particularly applicable for input events.

Routed events can also be used to communicate through the element tree, because the event data for the event is perpetuated to each element in the route. One element could change something in the event data, and that change would be available to the next element in the route.

Other than the routing aspect, there are two other reasons that any given WPF event might be implemented as a routed event instead of a standard CLR event. If you are implementing your own events, you might also consider these principles:

  • Certain WPF styling and templating features such as EventSetter and EventTrigger require the referenced event to be a routed event. This is the event identifier scenario mentioned earlier.
  • Routed events support a class handling mechanism whereby the class can specify static methods that have the opportunity to handle routed events before any registered instance handlers can access them. This is very useful in control design, because your class can enforce event-driven class behaviors that cannot be accidentally suppressed by handling an event on an instance.

Source: MSDN: Routed Events Overview

拒绝两难 2024-07-25 21:10:15

在 WPF 中,控件组合被大量使用。 它要求使用路由事件,因为控件集的组合大多数时候会公开单个活动。

In WPF control composition is highly used. which mandates to use Routed event, because composition of set of controls exposes single activity most of the time.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文