在WPF中获取鼠标下的逻辑UIElement

时间:2013-05-13 15:29:13

标签: wpf mouse event-bubbling visualtreehelper ismouseover

似乎所有检索鼠标下的元素的方式都与Visual Hit测试有关。

是否有一些我遗漏的机制可以让我抓住代表UIElement返回的当前可视树的实际HitTest

我正在做的总结:

我有一个自定义工具提示类,它依赖于基于鼠标结束的UIElement做某事。

简单地说,它挂钩到拥有Window的PreviewMouseMove事件并更新“当前项目”。此当前项应代表鼠标当前位于顶部的UIElement

不幸的是,我遇到Mouse.DirectlyOverVisualTreeHelper.HitTest(包括回调)的所有内容都不起作用。

任何人都可以在Window的MouseMove事件中提供有关如何在WPF中完成看似简单的任务的见解吗?

2 个答案:

答案 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)可能也有效。