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

Я столкнулся с неожиданным поведением отображения и скрытия клавиатуры в приложении 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 ответа

Решение

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

Вы можете попытаться поместить горизонтально заполненный элемент-заполнитель (скажем, 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 так же, как и на мобильном.

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

Другие вопросы по тегам