Глобальный обработчик PreviewKeyDown против локального обработчика PreviewKeyDown - PullRequest
0 голосов
/ 22 сентября 2009

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

Теперь у меня проблема в том, что в некоторых текстовых полях я также хочу использовать клавиши вверх / вниз. Это кажется невозможным, потому что другой обработчик, кажется, сначала глотает ключи.

Возможно ли, что когда один из этих элементов управления TextBox сфокусирован, они сначала получают клавиши вверх / вниз, а затем проглатывают их, чтобы "глобальный" PreviewKeyDown не получил их?

Конечно, я мог как-то отключить глобальный обработчик, когда такой TextBox получил фокус, но разве это хороший стиль?

1 Ответ

1 голос
/ 22 сентября 2009

У вас действительно нет выбора, кроме фильтрации этих ключей в обработчике глобального ключа.

Причиной возникновения этой проблемы является то, что все события Preview * являются туннельными, что означает, что элементы управления, расположенные выше в визуальном дереве, получают их первыми (начиная с корня). Причина, по которой вы используете это событие, в первую очередь, является причиной вашей проблемы.

Один вариант, который менее идеален, - зарегистрировать обработчик класса для TextBox.PreviewKeyDown (см. EventManager.RegisterClassHandler () ). Хотя это будет вызываться перед обработчиком PreviewKeyDown вашего окна, оно будет вызываться для всех TextBoxes в вашем приложении. Это может или нет то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...