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

在WPF中获取鼠标下的逻辑UIElement,wpf,mouse,event-bubbling,visualtreehelper,ismouseover,Wpf,Mouse,Event Bubbling,Visualtreehelper,Ismouseover,似乎所有在鼠标下检索元素的方法都与视觉命中测试有关 是否有某种机制让我无法获取实际的UIElement,它表示HitTest返回的当前可视树 我正在做的工作总结: 我有一个自定义工具提示类,它依赖于基于鼠标所在的UIElement执行某些操作 简单地说,它将挂接到所属窗口的PreviewMouseMove事件中,并更新“当前项”。此当前项应表示鼠标当前位于其上方的ui元素 不幸的是,我在Mouse.DirectlyOver,visualtreeheloper.HitTest(包括回调)中遇到的一

似乎所有在鼠标下检索元素的方法都与视觉命中测试有关

是否有某种机制让我无法获取实际的
UIElement
,它表示
HitTest
返回的当前可视树

我正在做的工作总结:

我有一个自定义工具提示类,它依赖于基于鼠标所在的UIElement执行某些操作

简单地说,它将挂接到所属窗口的
PreviewMouseMove
事件中,并更新“当前项”。此当前项应表示鼠标当前位于其上方的
ui元素

不幸的是,我在
Mouse.DirectlyOver
visualtreeheloper.HitTest
(包括回调)中遇到的一切都不起作用

任何人都可以在Window的
MouseMove
事件中深入了解如何在WPF中完成看似简单的任务吗?

使用以下属性:

var UIElement = Mouse.DirectlyOver as UIElement;

我不知道有什么明确的方法,但想法很简单

1) 查找可视树元素

2) 测试该元素是否存在于逻辑树中

3) 如果它存在,你已经找到了答案

4) 否则,您必须调用
VisualTreeHelper.GetParent()
并继续执行该算法


另外,
LogicalTreeHelper.GetParent(您的可视化树元素)
也可以工作

这仍然抓住了视觉元素。例如,如果我将鼠标放在一个带有默认模板的“按钮”上,如果我将鼠标放在文本(内容)上,它会返回给我那个特定的文本块。我基本上希望它返回按钮,而不是单独的视觉元素。