2009-09-22 4 views
0

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

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

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

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

ответ

1

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

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

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

+0

Но я мог бы получить свой собственный TextBox, а затем зарегистрировать обработчик для этого класса? Или, может быть, создать usercontrol? – codymanix

+0

Я думаю, что это сработает, но я не уверен. Это определенно стоит попробовать. – Andy

+0

Жаль, что это не сработает. Я использовал EventManager.RegisterClassHandler (typeof (TextBox), TextBox.PreviewKeyDownEvent, новый KeyEventHandler (WatchOutHandler)) и другие варианты, но глобальный обработчик, кажется, всегда называется первым. – codymanix

Смежные вопросы