2016-07-19 2 views
0

Всюду в приложении мне нужно использовать ENTER для перехода к следующему элементу управления (то же самое, что и Tab), и я делаю это с помощью EventManager.RegisterClassHandler, KeyDownEvent для текстовых полей в Application_Startup. Но для одного конкретного текстового поля (который является входом для сканера штрих-кода), я хочу, чтобы фокус позволял многократно сканировать. Поэтому он должен получить номер, обработать его, затем очистить ящик и сохранить фокус для следующего чтения. Считыватель штрих-кодов автоматически отправляет ENTER в конце чтения. Текстовое поле должно по-прежнему иметь возможность потерять фокус по выбору пользователя (например, щелчок мышью в другом поле)Как сохранить фокус клавиатуры в текстовом поле?

+0

У вас нет. Просто подключитесь к событиям клавиатуры непосредственно через [TextCompositionManager] (https://msdn.microsoft.com/en-us/library/system.windows.input.textcompositionmanager%28v=vs.110%29.aspx?f=255&MSPPError= -2147217396). Вы можете наблюдать за ключами, когда они сталкиваются, и сбрасывать пользовательское событие, когда вход соответствует выходному сигналу штрих-кода. Если вы хотите одеть его в MVVM, выставляйте свойство ICommand в окне, к которому вы привязываете свою модель просмотра, и запускайте эту команду при сканировании. – Will

ответ

2

Явно обработайте PreviewKeyDown на этом поле и установите Handled на true на аргументы события. Он выполняется перед любыми обработчиками KeyDown.

+0

Я просто пробовал, похоже, что обработчик класса выполняется первым, но это хорошая идея, чтобы изучить, может быть, я найду какое-то решение ... Спасибо –

+0

Вы всегда можете использовать 'PreviewKeyDown' для предотвращения« KeyDown ». –

+0

ДА! Вот и все. Благодаря! –

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