Откройте сенсорную клавиатуру Windows 10, закрепленную в WPF

Мы начали создавать приложение для подключения WPF в Windows 8 и недавно перенесли на Windows 10. Одна из реализованных нами функций - открытие клавиатуры Windows, когда TextBox получает фокус. В Windows 8 можно было докровать клавиатуру снизу, установив параметр реестра EdgeTargetDockedState и запустив процесс TabTip:

     string path =  @"C:\Program Files\Common Files\Microsoft Shared\ink\TabTip.exe";
     var info = new ProcessStartInfo(path);
     info.WindowStyle = ProcessWindowStyle.Maximized;
     var p = new Process();
     p.StartInfo = info;
     p.Start();

Однако клавиатура Windows 10, похоже, не имеет такого же поведения док-станции, как в Windows 8. Клавиатура теперь накладывает любое максимально развернутое окно, которое скрывает нижнюю часть любого приложения. Изменены только не максимизированные окна, чтобы соответствовать оставшемуся пространству.

Я проверил следующие ссылки, но не нашел решения:

Может ли клавиатура Windows 10 программным образом состыковаться с максимальным окном?

Ответ 1

Я открыл свой проект для автоматизации всего, что касается интеграции TabTip в приложении WPF.

Вы можете получить его на nuget, и после этого все, что вам нужно, это простая конфигурация в логике запуска приложений:

TabTipAutomation.BindTo<TextBox>();

Вы можете связать логику автоматизации TabTip с любым UIElement. Виртуальная клавиатура откроется, когда любой такой элемент получит фокус, и он закроется, когда элемент потеряет фокус. Не только это, но TabTipAutomation переместит UIElement (или Window) в представление, так что TabTip не будет блокировать сфокусированный элемент.

Подробнее см. сайт проекта.

Чтобы уточнить: если вы будете использовать этот пакет, TabTip не будет состыкован, но ваш интерфейс будет отображаться, и я думаю, это то, чего вы хотели достичь.

Ответ 3

Ответы здесь довольно старые, в настоящее время сенсорная клавиатура прекрасно работает при нажатии на любое текстовое поле, даже если окно развернуто.

Я рекомендую использовать как минимум .NET 4.6.2, чтобы получить лучшую поддержку сенсорных клавиатур в Windows 10 из-за ошибки в WPF, которая была исправлена в этой версии. Подробнее читайте здесь, прокрутите вниз до раздела WPF.

Единственное, что вам нужно сделать, это спроектировать свой XAML таким образом, чтобы ваш пользовательский интерфейс мог правильно реагировать, когда появляется сенсорная клавиатура. Обычно достаточно поместить ваш контент в ScrollViewer:

<ScrollViewer PanningMode="VerticalOnly"
              VerticalScrollBarVisibility="Hidden" 
              HorizontalScrollBarVisibility="Disabled"
    <!--Content here-->
</ScrollViewer>

Но для более сложных сценариев, таких как перемещение кнопок, расположенных снизу вверх над клавиатурой, вам нужно более тщательно писать свой XAML внутри ScrollViewer, например, используя сетки с динамическими высотами.

Надеюсь это поможет!