«Скрыть» текстовое поле из автоматического отображения клавиатуры Win10 - PullRequest
0 голосов
/ 02 мая 2018

Моя цель - показать экранную клавиатуру Windows 10, когда пользователь нажимает на текстовое поле.

Windows 10 имеет возможность автоматически отображать свою экранную клавиатуру, даже вне режима планшета, если в настройках включена определенная опция.

Однако, похоже, что у этой логики есть некоторые серьезные проблемы при работе с приложениями WPF - мерцание, отсутствие отображения и т. Д. Вы можете легко протестировать его в простом приложении WPF с несколькими текстовыми полями, если у вас устройство Win10 с сенсорным экраном.

Итак, я решил самостоятельно управлять клавиатурой, которая теперь отлично работает, с отключенной опцией автоматического отображения клавиатуры. Однако я не могу гарантировать, что у каждого пользователя Windows 10 эта опция будет отключена, поэтому я бы хотел, чтобы Windows «игнорировала» щелчки на текстовых полях в моем приложении WPF, поэтому только приложение само контролирует видимость клавиатуры.

Итак, мой вопрос - есть ли способ заставить Windows игнорировать фокус на определенных текстовых полях?

PS. Если нет четкого способа сделать это, я был бы благодарен за любые подсказки о том, как Windows фактически получает информацию о редактируемом текстовом поле WPF, поэтому я могу поиграть с моими собственными реализациями TextBox, которые не будут вызывать эту логику.

Обновление:

Кажется, можно убрать «зацепки», которые использует клавиатура, чтобы определить, что текстовое поле сфокусировано, используя FrameworkElementAutomationPeer вместо TextBoxAutomationPeer в пользовательской реализации TextBox, но это разрушает возможность использования это текстовое поле в автоматизации (что мне не нравится).

1 Ответ

0 голосов
/ 02 мая 2018

У меня нет устройства с сенсорным экраном для тестирования, но из моих быстрых тестов щелчка мышью я обнаружил, что TextBox.Focusable = false;

https://msdn.microsoft.com/en-us/library/system.windows.uielement.focusable(v=vs.110).aspx

Это, однако, делает невозможным получение ввода с клавиатуры, поэтому, возможно, добавьте другой метод в TextBox, например:

txtBoxTestFocus_MouseDown или txtBoxTestFocus_TouchDown, которые затем могут установить txtBoxTestFocus.Focusable = true;

Не уверен, что это поможет, так как я не смог проверить это извините

...