似乎所有检索鼠标下的元素的方式都与Visual Hit测试有关。
是否有一些我遗漏的机制可以让我抓住代表UIElement
返回的当前可视树的实际HitTest
?
我正在做的总结:
我有一个自定义工具提示类,它依赖于基于鼠标结束的UIElement做某事。
简单地说,它挂钩到拥有Window的PreviewMouseMove
事件并更新“当前项目”。此当前项应代表鼠标当前位于顶部的UIElement
。
不幸的是,我遇到Mouse.DirectlyOver
,VisualTreeHelper.HitTest
(包括回调)的所有内容都不起作用。
任何人都可以在Window的MouseMove
事件中提供有关如何在WPF中完成看似简单的任务的见解吗?
答案 0 :(得分:6)
使用Mouse.DirectlyOver
属性:
var UIElement = Mouse.DirectlyOver as UIElement;
答案 1 :(得分:2)
我不知道任何明确的方式,但这个想法非常简单,
1)找到可视树元素
2)测试元素是否存在于逻辑树中,
3)如果它存在,你就找到了答案。
4)否则你将不得不打电话给VisualTreeHelper.GetParent()
并继续算法。
Ps,LogicalTreeHelper.GetParent(your visual tree element)
可能也有效。