Получение логического UIElement под мышью в WPF

Кажется, что весь способ извлечения элемента под мышью связан с тестированием на визуальное попадание.

Есть ли какой-то механизм, который мне не хватает, который позволил бы мне захватить фактический UIElement который представляет текущее визуальное дерево, что HitTest возвращается?

Резюме того, что я делаю:

У меня есть пользовательский класс всплывающей подсказки, который основывается на выполнении чего-либо, основанного на UIElement, на котором находится мышь.

Проще говоря, он подключается к имеющемуся окну PreviewMouseMove событие и обновляет "текущий элемент". Этот текущий элемент должен представлять UIElement что мышь в данный момент находится поверх.

К сожалению все, с чем я столкнулся Mouse.DirectlyOver, VisualTreeHelper.HitTest (обратные вызовы включены) не работает.

Может кто-нибудь предложить понимание того, как выполнить, казалось бы, простую задачу в WPF в Windows? MouseMove событие?

2 ответа

Использовать Mouse.DirectlyOver имущество:

var UIElement = Mouse.DirectlyOver as UIElement;

Я не знаю какого-либо явного способа, но идея довольно проста,

1) Найти визуальный элемент дерева

2) Проверьте, присутствует ли элемент в логическом дереве,

3) Если он присутствует, вы нашли ответ.

4) В противном случае вам придется позвонить VisualTreeHelper.GetParent() и продолжить алгоритм.

Ps, LogicalTreeHelper.GetParent(your visual tree element) МОЖЕТ также работать.

Другие вопросы по тегам