我和一位同事正在讨论路由事件,我们提出了一些没有多大意义的事情。首先,Direct
的目的是什么?事件,以及为什么两者都是 LeftMouseButtonDown
和 PreviewLeftMouseButtonDown
直接事件而不是分别冒泡和隧道?
根据文档,LeftMouseButtonDown
(和预览)事件似乎表现为冒泡和隧道事件,除了在这些事件遍历树时引发和重新引发事件。由于直接事件只能由事件源处理,因此任何 UIElement
可以处理直接事件,因为每个人都在引发事件,因此也是源。 (除非重新引发事件与引发不同?)。为什么这些不像许多其他类似事件那样隧道和冒泡?
我和我的同事都无法想出一个用例,在该用例中我们将使用直接策略创建自定义事件(尽管我们想出了一些用于隧道和冒泡的方法),但是 LeftMouseButtonDown
,最常见的事件之一(如果不是最常见的)就是使用这种策略。
有人对这背后的理性有任何想法吗?
谢谢!
最佳答案
我的猜测是性能,并且考虑为同一件事有多个事件。
MouseDown 已经有一个事件,路由它和 LeftMouseDown 没有多大意义。最后,哪个会先触发,取消\处理第一个会阻止另一个?听起来两次处理同一个事件太容易了。
关于wpf - 直接路由事件问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3339006/