2013-05-13 4 views
4

Кажется, что весь способ извлечения элемента под мышью относится к тестированию Visual Hit.Получение логического UIElement под мышью в WPF

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

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

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

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

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

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

ответ

5

Используйте Mouse.DirectlyOver свойство:

var UIElement = Mouse.DirectlyOver as UIElement; 
+1

Это все еще захватывает визуальные элементы. Так, например ... если бы я был наводил курсор на кнопку «Button» с ее шаблоном по умолчанию, если бы я поместил мышь текста (контента), это вернет мне этот специфический текстовый блок. Я в основном хочу, чтобы она вернула кнопку в отличие от отдельного визуального элемента. – tronious

+0

Удивительный! так просто, спасибо. –

2

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

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

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

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

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

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