Getting the Logical UIElement under the mouse in WPF

一笑奈何 提交于 2019-12-23 13:15:51

问题


It seems that all of the way of retrieving an element under the Mouse relates to Visual Hit testing.

Is there some mechanism that I'm missing which would allow me to grab the actual UIElement that represents the current visual tree that the HitTest returns?

Summary of what I'm doing:

I have a custom tooltip class which relies on doing something based on the UIElement that the mouse is over.

Simply put, it hooks into the owning Window's PreviewMouseMove event and updates a "current Item". This current item should represent the UIElement that the mouse is currently over top of.

Unfortunately everything I've encountered with Mouse.DirectlyOver, VisualTreeHelper.HitTest (callbacks included) doesn't work.

Can anyone offer insight in how to accomplish a seemingly simple task in WPF within Window's MouseMove event?


回答1:


Use the Mouse.DirectlyOver property:

var UIElement = Mouse.DirectlyOver as UIElement;



回答2:


I don't know any explicit way, but the idea is pretty simple,

1) Find the visual tree element

2) Test if the element is present in logical tree,

3) If it's present, you've found the answer.

4) Otherwise you're gonna have to call VisualTreeHelper.GetParent() and continue the algorithm.

Ps, LogicalTreeHelper.GetParent(your visual tree element) MIGHT also work.



来源:https://stackoverflow.com/questions/16525774/getting-the-logical-uielement-under-the-mouse-in-wpf

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!