如何防止在 UWP 中自动关闭软输入面板?

How to prevent auto closing of soft input panel in UWP?

我在使用 windows 10 的平板电脑上工作的 UWP 应用程序中遇到键盘显示和隐藏的意外行为。

经过一次又一次的仔细测试,我注意到当您将焦点放在输入框上并为其打开键盘时,就会出现此问题。现在聚焦下一个输入需要布局调整,这样它就不会被键盘隐藏。当您尝试聚焦下一个元素时,默认情况下以前打开的键盘隐藏,现在我无法打开键盘,直到这个新的输入框失去焦点并再次手动获得焦点。

因此,为了控制这个问题,我想防止每次将焦点切换到新文本框时自动隐藏和显示键盘。它应该在页面加载后打开键盘(已经找到使用 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

此问题已在 2018 年 4 月 30 日发布的 windows10 版本 1803 中得到部分解决。在此版本中,当焦点从一个输入元素转移到另一个输入元素时,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 桌面版和移动版有所帮助。

P.S。是的,占位符窗格最初是零高度且折叠的。