-->

Getting the Logical UIElement under the mouse in W

2019-06-26 15:16发布

问题:

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.