Почему клавиатура Windows 10 появляется и сразу исчезает при нажатии в текстовом поле WPF внутри tabcontrol? - PullRequest
0 голосов
/ 26 октября 2018

У нас странное поведение с нашим приложением WPF в Windows 10 (обновление 1803 - Microsoft Surface Go).

Внутри приложения у меня есть Tabcontrol, и его ItemsSource привязан в коде за списком объектов (на основе usercontrol).

Всякий раз, когда я нажимаю внутри текстового поля, клавиатура Windows 10 появляется и сразу исчезает. Если я снова нажму на текстовое поле, клавиатура появится правильно. Когда я нажимаю в другом текстовом поле, то же самое происходит снова (клавиатура появляется / исчезает, и мне нужно снова нажать в том же текстовом поле).

В других частях приложения этого не происходит.

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

Я подозреваю, что это связано с одним из обновлений Windows, потому что это же приложение отлично работает на других планшетах с Windows 10 другого бренда (один из этих других планшетов, я уверен, что они имеют версию Windows 10 LTSB от 2016 года).

Я пытался удалить столько обновлений, сколько смогу, но не могу удалить накопительное обновление 1803.

Версия .Net, которую я использовал, - .Net 4.0, и я попытался обновить до 4.7.2, но безуспешно. Как советовали в этой теме: C # WPF Windows 10 (1803) TouchKeyboard ненадежная проблема (Prism ClickOnce)

Я вижу, что другой человек жалуется, что у него есть подобные проблемы только после определенного обновления Windows 10. https://social.msdn.microsoft.com/Forums/en-US/b9efb4eb-e0a9-4bf0-9985-57a673c42f79/wpf-application-windows-10-touch-keyboard-flickering-issue?forum=wpf

Я попытался переключиться в режим планшета и в режим рабочего стола. В обоих случаях происходит одинаковое поведение. Итак, теперь я перешел в режим рабочего стола с настройкой «панели управления», где клавиатура появляется, если физическая клавиатура не подключена. enter image description here


Единственный найденный мной обходной путь:

  1. Поместите tabcontrol внутри Grid и gridrow и создайте второй GridRow (height = 0) с текстовым полем внутри (новое текстовое поле ДОЛЖНО быть вне tabcontrol). Когда нажата одна из вкладок, поместите фокус на вновь созданное текстовое поле.

    Keyboard.Focus (focusbox);

Когда я это делаю, клавиатура не исчезает при первом нажатии на текстовое поле внутри tabcontrol.

...