2013-05-13 51 views
4

似乎所有检索鼠标下的元素的方式都与Visual Hit测试有关。在WPF中的鼠标下获取逻辑UIElement

是否有一些机制,我失踪,这将允许我抓住实际UIElement,代表当前视觉树HitTest返回?

总结我在做什么:

我有一个自定义的工具提示类依赖于做基础上的UIElement的东西,鼠标已经结束。

简而言之,它会挂入拥有窗口的PreviewMouseMove事件并更新“当前项目”。这个当前项目应代表鼠标当前处于顶部的UIElement

不幸的是,我遇到的所有Mouse.DirectlyOver,​​(包括回调)都不起作用。

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

回答

5

使用Mouse.DirectlyOver属性:

var UIElement = Mouse.DirectlyOver as UIElement; 
+1

虽然这仍然抓住了视觉元素。所以,例如...如果我将鼠标悬停在默认模板的“Button”上,如果我放置了文本(内容)的鼠标,它会返回给我特定的文本块。 我基本上想要它返回按钮,而不是个别的视觉元素。 – tronious 2013-05-13 16:55:23

+0

太棒了!太简单了,谢谢。 – 2015-02-12 19:55:51

2

我不知道任何明确的方式,但这个想法很简单,

1)求视觉树元素

2)测试如果这个元素存在于逻辑树中,那么

3)如果存在,你找到了答案。

4)否则,你将不得不打电话VisualTreeHelper.GetParent()并继续算法。

Ps,LogicalTreeHelper.GetParent(your visual tree element)也可以工作。