WPF:路由事件还是常规事件?
在 WPF 中,我们有路由事件。 什么时候应该使用这些来代替常规事件?
In WPF we have routed events. When should these be used instead of regular events?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
在 WPF 中,我们有路由事件。 什么时候应该使用这些来代替常规事件?
In WPF we have routed events. When should these be used instead of regular events?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
路由事件具有特殊的行为,但如果您在引发事件的元素上处理事件,则该行为在很大程度上是不可见的。
如果您使用任何建议的方案,路由事件就会变得强大:在公共根定义公共处理程序、组合您自己的控件或定义您自己的自定义控件类。
路由事件侦听器和路由事件源不需要在其层次结构中共享公共事件。 任何 UIElement 或 ContentElement 可以是任何路由事件的事件侦听器。 因此,您可以使用整个工作 API 集中可用的全套路由事件作为概念“接口”,应用程序中的不同元素可以通过该接口交换事件信息。 路由事件的这种“接口”概念特别适用于输入事件。
路由事件也可用于通过元素树进行通信,因为事件的事件数据会永久保留到路由中的每个元素。 一个元素可以更改事件数据中的某些内容,并且该更改将可用于路由中的下一个元素。
除了路由方面之外,还有两个其他原因导致任何给定的 WPF 事件可能被实现为路由事件而不是标准 CLR 事件。 如果您要实现自己的事件,您还可以考虑以下原则:
来源: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:
Source: MSDN: Routed Events Overview
在 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.