Как предотвратить автоматическое закрытие мягкой панели ввода в UWP? - PullRequest
0 голосов
/ 06 мая 2018

Я столкнулся с неожиданным поведением отображения и скрытия клавиатуры в приложении UWP, работающем на планшете с windows 10.

После тщательного тестирования снова и снова я заметил, что эта проблема возникает, когда у вас есть фокус на поле ввода и клавиатура открыта для него. Теперь для фокусировки следующего ввода необходимо настроить макет, чтобы он не скрывался клавиатурой. Когда вы пытаетесь сфокусировать следующий элемент, по умолчанию ранее открытая клавиатура скрывается, и теперь я не могу открыть клавиатуру до тех пор, пока это новое поле ввода не потеряет фокус и снова не получит фокус вручную.

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

Пожалуйста, проверьте это видео для четкого понимания проблемы. https://www.dropbox.com/s/1c876uwytywio1t/Soft%20Keyboard%20Issue.mp4?dl=0

Пожалуйста, проголосуйте за это предложение, если кто-то еще сталкивается с этой проблемой. https://wpdev.uservoice.com/forums/110705-universal-windows-platform/suggestions/34170142-inputpane-does-not-open-when-focus-is-shifted-to-n

Ответы [ 2 ]

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

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

// on the window initialization, remember the input pane
this._inputPane = InputPane.GetForCurrentView()
// then, subscribe to the events
_inputPane.Showing = (sender, args) =>
{
    args.EnsuredFocusedElementInView = true; // skip default vertical-shift behavior
    this._placeholderPane.Height = args.OccludedRect.Height;
}

_inputPane.Hiding = (sender, args) =>
{
    this._placeholderPane.Height = 0;
}

Надеюсь, это поможет на рабочем столе Win10 так же, как и на мобильном.

P.S. Да, изначально область заполнителя имеет нулевую высоту и свернута.

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

Эта проблема была частично решена в Windows 10 версии 1803, выпущенной 30 апреля 2018 года. В этой версии InputPane не скрывает и не показывает снова и снова, когда фокус смещается с одного элемента ввода на другой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...