如何自行编程 WPF 中存在的系统等路由事件? [关闭]
Posted
技术标签:
【中文标题】如何自行编程 WPF 中存在的系统等路由事件? [关闭]【英文标题】:How to program routed events like system present in WPF on my own? [closed] 【发布时间】:2020-06-14 23:05:59 【问题描述】:WPF 具有出色的路由事件架构。甚至事件也不必在任何特定对象中。像 Button.Clicked 可以在父 Stackpanel 中处理。您可以使用 e.Handled = true 来阻止它路由或冒泡。它如何知道如何路由事件。所有这一切都不同于正常事件。关于我的一切似乎都很神奇。我想知道如何在 C# 中自己创建这样的系统。是否有任何我应该了解的设计模式或任何解释这种架构的好博客。
【问题讨论】:
【参考方案1】:在您的 UI 中,每个对象都有对其父对象的引用,例如 Window <- Grid <- Button
。
最简单的调度代码会从触发事件的元素开始,然后让它冒泡直到它被处理。
// Pseudocode
HandleLocally(sender, e);
if(!e.Handled)
Parent.HandleBubbledEvent(sender, e);
当然,这不是 WPF 的工作方式 - WPF 要复杂得多。 WPF creates an "EventRoute" 来自依赖对象图,然后调用路由中的所有处理程序。一些处理程序被调用even for events that are marked as handled。
【讨论】:
【参考方案2】:我不了解博客,但 wpf 元素的代码在 referencesource.microsoft.com 上是可读的。
编辑:
有时他们会在grid.cs line 488 中解释元素的工作原理。
【讨论】:
以上是关于如何自行编程 WPF 中存在的系统等路由事件? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章