Замена экранной клавиатуры Windows 7+ в WPF

Я поддерживаю / разрабатываю приложение C&C, которое обычно используется на сенсорных экранах. Большинство текстовых полей требуют ввода чисел, поэтому большая часть обычной клавиатуры бессмысленна. Мой босс хочет, чтобы я сделал цифровую клавиатуру без клавиатуры для этих ящиков. (У нас есть и другие буквенно-цифровые поля.) Пользователь может установить флажок, чтобы указать, нужна ли экранная клавиатура.

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

Поскольку приложение уже создано, я решил изучить использование словаря ресурсов, чтобы изменить текстовые поля на месте; см. Можно ли установить код за словарем ресурсов в WPF для обработки событий?. Судя по комментариям, это, по-видимому, также уродливо, в соответствии с дизайном WPF.

Теперь мне нужно сообщить своему коду, где находится окно (или другой элемент управления) для клавиатуры. Похоже на атрибут XAML - свойство зависимости. К сожалению, ResourceDictionary не расширяет DependencyObject, поэтому кажется, что этот метод неработоспособен.

Согласно WPF: определенные текстовые поля ввода (для номеров телефонов и т. Д.), что-то вроде это будет работать, если при нажатии будет вызвана клавиатура только с разрешенными символами. На самом деле, это было бы абсолютно идеально. Если бы только это было частью WPF и, следовательно, интегрировано с клавиатурой.

Но, может быть, часть моего подхода неверна? Как я могу получить цифровую клавиатуру, которая появляется, когда выбраны "числовые поля"? Я действительно не хочу дублировать (в отличие от ссылки) словарь ресурсов на каждой странице XAML, содержащей текстовое поле.

P.S. Как форматирование вопроса?


person Grault    schedule 27.04.2015    source источник
comment
Вы видели это, это и обязательно это?   -  person huysentruitw    schedule 27.04.2015
comment
@WouterHuysentruit Нет, не видел. Спасибо! Теперь изучим их ...   -  person Grault    schedule 27.04.2015


Ответы (1)


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

Теперь сам элемент управления знает, где его коснулись (да, я знаю), и он может содержать необходимые ресурсы как для рисования себя, так и для всплывающей страницы клавиатуры. Вам не нужно ни о чем беспокоиться, кроме как использовать его на своих страницах.

person Blindy    schedule 27.04.2015
comment
Это была моя первая мысль, но мне показалось, что работы намного больше. В любом случае мне нужна настраиваемая экранная клавиатура; Я не хотел добавлять к этому текстовое поле. - person Grault; 27.04.2015
comment
Это не так уж и много работы, просто создайте текстовое поле Wpf, и у вас уже есть база. Все, что осталось, - это подключить ваш GotFocus (я забыл точное написание) и / или PreviewMouseUp (и эквивалентное событие касания), чтобы вызвать всплывающее окно для отображения. - person Blindy; 28.04.2015