Захват ключевых событий в Silverlight - PullRequest
2 голосов
/ 22 августа 2009

Справочная информация: у меня есть приложение, в котором я хочу иметь возможность записывать события клавиатуры. На главном экране пользователь нажимает кнопку «Пуск». Во время игры кнопка «Пуск» исчезает, и отображается кнопка «Сброс» (видимость изменяется на двух элементах управления). Это только два стандартных элемента управления, так как все остальные - не фокусируемые пользовательские элементы управления.

Проблема: когда пользователь нажимает кнопку «Пуск» (тем самым выделяя его фокус), затем он скрывается, и появляется кнопка «Сброс», кнопка «Сброс» автоматически фокусируется. Это не так ужасно, так как события нажатия клавиш все еще возникают, но фокусировка вызывает большие проблемы. Если пользователь нажимает пробел, то кнопка интерпретирует его как событие Click.

Если я добавлю обработчик для KeyUp и KeyDown к самой кнопке и установлю событие на Обработано, оно поглотит событие, если я удержу пробел и отпущу его, но не если я просто коснусь его.

Вопрос: Как я могу запретить пробелу активировать кнопку, оставаясь при этом способным отвечать на пробел в моем приложении?

Ответы [ 2 ]

1 голос
/ 22 августа 2009

Попробуйте создать простой пользовательский элемент управления или использовать тот, для которого вы можете установить IsHitTestVisible="True". Затем поместите его где-нибудь в той же таблице и подключите к его ключевым событиям и другим событиям ввода, которые вы хотите записать.

Чтобы убедиться, что фокус переходит к вашему «невидимому» элементу управления, вы можете позвонить (yourControlsNameHere).Focus() после нажатия кнопки Старт.

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

0 голосов
/ 11 марта 2010

Можно установить для свойства IsTabStop обеих кнопок значение false (например, при нажатии кнопки «Пуск»). Таким образом, они не смогут получить фокус и никогда не будут обрабатывать события клавиатуры.

http://msdn.microsoft.com/en-us/library/system.windows.controls.control.istabstop%28VS.95%29.aspx

...