Получение логического 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)
МОЖЕТ также работать.