Поиск…


Отображение сенсорной клавиатуры в Windows 8 и Windows 10

Приложения WPF, ориентированные на .NET Framework 4.6.2 и более поздние версии

В приложениях WPF, ориентированных на .NET Framework 4.6.2 (и более поздних), мягкая клавиатура автоматически вызывается и отменяется без каких-либо дополнительных шагов.

Поддержка мягкой клавиатуры WPF с .NET Framework 4.6.2

Приложения WPF, ориентированные на .NET Framework 4.6.1 и более ранние версии

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

Сенсорная клавиатура в Windows

Временное решение

Сенсорная клавиатура на самом деле является классическим exe приложением, которое можно найти на каждом ПК с Windows 8 и Windows 10 по следующему пути: C:\Program Files\Common Files\Microsoft Shared\Ink\TabTip.exe .

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

public class TouchEnabledTextBox : TextBox
{
    public TouchEnabledTextBox()
    {
        this.GotTouchCapture += TouchEnabledTextBox_GotTouchCapture;
    }

    private void TouchEnabledTextBox_GotTouchCapture(
       object sender, 
       System.Windows.Input.TouchEventArgs e )
    {
        string touchKeyboardPath =
           @"C:\Program Files\Common Files\Microsoft Shared\Ink\TabTip.exe";        
        Process.Start( touchKeyboardPath );
    }
}

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

//added field
private Process _touchKeyboardProcess = null;
 
//replace Process.Start line from the previous listing with
_touchKeyboardProcess = Process.Start( touchKeyboardPath );

Теперь вы можете LostFocus событие LostFocus :

//add this at the end of TouchEnabledTextBox's constructor
this.LostFocus += TouchEnabledTextBox_LostFocus;

//add this method as a member method of the class
private void TouchEnabledTextBox_LostFocus( object sender, RoutedEventArgs eventArgs ){
   if ( _touchKeyboardProcess != null ) 
   {
      _touchKeyboardProcess.Kill();
      //nullify the instance pointing to the now-invalid process
      _touchKeyboardProcess = null;
   }
}

Примечание о режиме планшета в Windows 10

Windows 10 представила планшетный режим , который упрощает взаимодействие с системой при первом использовании ПК. Этот режим, помимо других улучшений, гарантирует, что сенсорная клавиатура отображается автоматически даже для классических приложений Desktop, включая приложения WPF.

Подход к настройкам Windows 10

Помимо режима планшета, Windows 10 может автоматически отображать сенсорную клавиатуру для классических приложений даже вне режима планшета. Это поведение, которое по умолчанию отключено, можно включить в приложении «Настройки».

В приложении « Настройки» перейдите в категорию « Устройства » и выберите « Ввод» . Если вы прокрутите весь путь вниз, вы можете найти «Показать сенсорную клавиатуру или панель рукописного ввода, если не в режиме планшета, и нет настройки клавиатуры», которую вы можете включить.

Настройка сенсорной клавиатуры

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



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow