WPF Получить элемент (ы) под мышью

Есть ли способ с WPF получить массив элементов под мышью при событии MouseMove?

3 ответа

Решение

Из " WPF Unleashed", стр. 383:

Визуальное тестирование хитов может проинформировать вас обо всех VisualЕсли вы пересекаете место, [...] вы должны использовать [...] [VisualTreeHelper.]HitTest метод, который принимает HitTestResultCallback делегировать. До этой версии HitTest возвращается, делегат вызывается один раз для каждого соответствующего Visualначиная с самого верхнего и заканчивая самым нижним.

Подпись такого обратного вызова

HitTestResultBehavior Callback(HitTestResult result)

и он должен вернуться HitTestResultBehaviour.Continue чтобы получить дополнительные хиты, как показано ниже (со связанной страницы в MSDN):

// Return the result of the hit test to the callback.
public HitTestResultBehavior MyHitTestResult(HitTestResult result)
{
    // Add the hit test result to the list that will be processed after the enumeration.
    hitResultsList.Add(result.VisualHit);

    // Set the behavior to return visuals at all z-order levels.
    return HitTestResultBehavior.Continue;
}

Для получения дополнительной информации, пожалуйста, обратитесь к документации MSDN дляVisualTreeHelper.HitTest,

Вы также можете попробовать использовать свойство Mouse.DirectlyOver, чтобы получить самый верхний элемент, который находится под мышью.

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