在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(您的可视化树元素)
也可以工作 这仍然抓住了视觉元素。例如,如果我将鼠标放在一个带有默认模板的“按钮”上,如果我将鼠标放在文本(内容)上,它会返回给我那个特定的文本块。我基本上希望它返回按钮,而不是单独的视觉元素。