Пользовательская панель управления WPF не реагирует на события мыши - PullRequest
0 голосов
/ 13 января 2011

Я создал пользовательский элемент управления панели и хотел бы, чтобы он реагировал на событие перемещения мыши, однако, когда я добавляю обработчик события следующим образом:

Private Sub FloatingPanel_MouseMove(ByVal sender As Object, 
                                    ByVal e As MouseEventArgs) Handles Me.MouseMove

End Sub

Он реагирует только при моем перемещенииНаведите курсор мыши на один из дочерних элементов управления на панели.Мне нужно, чтобы он реагировал всякий раз, когда я перемещаю мышь в любое место внутри пользовательской панели.


Обновление: Я нашел следующий вопрос, который дал мне подсказку:

WPF - как лучше всего реализовать панель с перетаскиваемыми / масштабируемыми дочерними элементами?

Я могу получать события мыши на самом GraphCanvas, только если он имеет фон в точке

Это заставило меня просто установить фон, который, кажется, решил проблему ... Мой вопрос сейчас, почему?Почему я должен установить фон для получения события mousemove?


Обновление 2: Следующий код в конечном итоге решил проблему (см. Ответ Кента ниже).

Protected Overrides Function HitTestCore(ByVal hitTestParameters As System.Windows.Media.PointHitTestParameters) As System.Windows.Media.HitTestResult
    Return New PointHitTestResult(Me, hitTestParameters.HitPoint)
End Function

Спасибо, Мэтт

Ответы [ 2 ]

3 голосов
/ 13 января 2011

Для целей проверки попаданий логика тестирования совпадений по умолчанию в WPF имеет два режима прозрачности. Один из них прозрачен как визуально, так и при тестировании на попадание (# 00000000 или без установки фона), другой прозрачен только визуально и не исключает проверку на попадание (## 00ffffff). Вы хотите последнее.

Полагаю, вы также можете переопределить UIElement.HitTestCore в своем пользовательском Panel, чтобы не было зависимости от установки фона.

1 голос
/ 13 января 2011

Я действительно подозревал, что это могло быть проблемой здесь;Если фон элемента управления равен нулю и другого подкомпонента там нет, ваша мышь перемещается не через элемент управления, а через элемент управления за ним, поэтому имеет смысл, что вы не получите событие мыши от этого (это не очень ожидаемо).хотя, потому что границы элемента управления могут охватывать область).

...