#wpf #wpf-controls
#wpf #wpf-элементы управления
Вопрос:
У меня обработано событие previewmousewheel элемента управления combobox. Когда моя мышь находится на элементе управления и я перемещаю центральное колесо мыши, возникает это событие. Но когда моя мышь находится вдали от элемента управления, и я перемещаю центральное колесо мыши, это событие не вызывается.
Кто-нибудь, пожалуйста, может объяснить мне, почему это происходит?
Если я хочу вызвать событие, когда моя мышь находится вдали от элемента управления, то какое событие я должен обработать?
Ответ №1:
Это ожидаемое поведение.
Если курсор мыши не расположен над элементом управления, то через него не передаются события мыши. Вы бы не ожидали, что событие щелчка мыши будет перенаправлено через него, если курсор будет находиться над другим элементом управления, не так ли?
Если вы хотите такого поведения, я бы посоветовал вам обработать событие mousewheel на странице / просмотре и направить его оттуда, однако будьте осторожны, поскольку пользователь ожидает, что события мыши и клавиатуры будут обрабатываться элементом в фокусе.
Комментарии:
1. спасибо за информацию. Ну, я подумал, что если элемент управления содержит фокус, то, независимо от положения мыши, событие колеса должно быть вызвано. Я говорю это, потому что данные действительно сворачиваются. Ну, в этом случае я ошибаюсь. Еще раз спасибо.
Ответ №2:
В тех случаях, когда пользователь ожидает, что событие будет перенаправлено на элемент управления, который вы могли бы использовать Mouse.Capture(someControl)
и Mouse.Capture(null)
, чтобы остановить пересылку.
Вы должны использовать это только тогда, когда это имеет смысл. Например. при перетаскивании полосы прокрутки, когда вы начали перетаскивать большой палец, но не обязаны оставаться на нем, пока вы удерживаете левую кнопку мыши нажатой.
При использовании Mouse.Capture()
убедитесь, что вы всегда предоставляете обратный путь от захвата.