【问题标题】:How to prevent auto closing of soft input panel in UWP?如何防止在 UWP 中自动关闭软输入面板?
【发布时间】:2018-10-16 09:07:23
【问题描述】:

我在使用 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

【问题讨论】:

  • 你在Windows10 1803 Spring Creators Update中试过了吗?
  • 是的,在这个新版本中已经修复了一些其他错误,我的建议中给出了这些错误的链接。

标签: c# uwp windows-10-universal uwp-xaml soft-keyboard


【解决方案1】:

此问题已在 2018 年 4 月 30 日发布的 Windows 10 版本 1803 中部分解决。在此版本中,当焦点从一个输入元素转移到另一个输入元素时,InputPane 不会一次又一次地隐藏和显示。

【讨论】:

    【解决方案2】:

    您可以尝试在页面底部放置一个水平拉伸的占位符控件(比如 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 桌面上的帮助与在移动版上一样。

    附:是的,最初占位符窗格的高度为零并且已折叠。

    【讨论】:

    • 现在不需要额外的工作,因为它是以前版本的 windows 中的一个错误,当在等待关闭前一个事件之前触发事件时会产生意外行为。就像在关闭第一个 ContentDialog 后突然打开第二个 ContentDialog 一样,第二个不会等待前一个正确关闭,应用程序将崩溃。键盘的情况也是如此,其中布局更新事件和隐藏然后显示 InputPane 事件混合在一起。所有这些问题都在版本 1803 中得到修复。
    • @ZubairRana,是的,我完全理解这一点。以防万一您也需要解决方法来支持以前的构建。
    猜你喜欢
    • 1970-01-01
    • 2019-12-01
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    相关资源
    最近更新 更多