一位同事和我正在谈论路由事件,我们提出了一些没有多大意义的事情。主要是Direct
事件的目的是什么,为什么LeftMouseButtonDown
和PreviewLeftMouseButtonDown
分别是直接事件而不是冒泡和隧道事件?
根据文档,LeftMouseButtonDown
(和预览)事件似乎表现为冒泡和隧道事件,除了事件在这些事件遍历树时被引发和重新引发。由于直接事件只能由事件源处理,因此任何UIElement
都可以处理直接事件,因为每个事件都会引发事件,因此也是源事件。 (除非重新加注事件与提高不同?)。为什么这些不像其他许多类似事件一样窜动和冒泡?
我的同事和我都不能提出一个用例,我们可以使用直接策略创建一个自定义事件(虽然我们提出了一些用于隧道和冒泡)但是LeftMouseButtonDown
,其中一个最常见的事件(如果不是最常见的)是使用这种策略。
任何人对这背后的理性都有任何想法吗?
谢谢!
答案 0 :(得分:2)
我的猜测是性能,并且考虑为同一事件设置多个事件。
MouseDown已经有一个事件,路由它和LeftMouseDown没有多大意义。最后,哪个会首先触发并取消\处理第一个阻止另一个?听起来两次处理同一事件太容易了。