【问题标题】:Open Windows 10 touch keyboard docked in WPF打开停靠在 WPF 中的 Windows 10 触摸键盘
【发布时间】:2016-04-18 13:46:10
【问题描述】:

我们开始在 Windows 8 中创建 WPF 触控应用程序,最近迁移到 Windows 10。我们实现的一项功能是在 TextBox 获得焦点时打开 Windows 键盘。在 Windows 8 中,可以通过设置注册表设置 EdgeTargetDockedState 并启动 TabTip 进程来将键盘停靠在底部:

     string path =  @"C:\Program Files\Common Files\Microsoft Shared\ink\TabTip.exe";
     var info = new ProcessStartInfo(path);
     info.WindowStyle = ProcessWindowStyle.Maximized;
     var p = new Process();
     p.StartInfo = info;
     p.Start();

但是,Windows 10 键盘的停靠行为似乎与 Windows 8 不同。键盘现在覆盖任何最大化的窗口,该窗口隐藏了任何应用程序的底部。只有未最大化的窗口会调整大小以适应剩余空间。

我检查了以下链接,但没有找到解决方案:

Windows 10 键盘能否以编程方式停靠以实现最大化窗口?

【问题讨论】:

  • 你找到解决办法了吗?
  • 据我所知,Windows 10中的键盘在窗口最大化时无法停靠。我在微软的链接里问过哪里可以正式申请这个功能,但没有得到满意的答复。如果这不会实现,我想我将不得不查看“几乎最大化”窗口,然后打开键盘(这似乎是一个非常丑陋的解决方案)。

标签: c# wpf windows-10 on-screen-keyboard


【解决方案1】:

我开源了我的项目以自动化 WPF 应用程序中与 TabTip 集成有关的所有内容。

您可以在nuget 上获取它,然后您只需要在应用启动逻辑中进行简单配置即可:

TabTipAutomation.BindTo<TextBox>();

您可以将 TabTip 自动化逻辑绑定到任何 UIElement。当任何此类元素获得焦点时,虚拟键盘将打开,当元素失去焦点时,它将关闭。不仅如此,TabTipAutomation 还会将 UIElement(或 Window)移动到视图中,这样 TabTip 就不会阻塞焦点元素。

欲了解更多信息,请参阅project site

澄清一下:如果您将使用此包,TabTip 将不会停靠,但您的 UI 将在视图中,我想这就是您想要实现的。

【讨论】:

  • 谢谢@Макс Федотов,我最终没有使用你的项目,但我挑选并取出了我需要的部分,这帮助我克服了我面临的问题。
  • 这是非专业代码:private const string TabTipExecPath = @"C:\Program Files\Common Files\microsoft shared\ink\TabTip.exe";私有常量字符串 TabTipRegistryKeyName = @"HKEY_CURRENT_USER\Software\Microsoft\TabletTip\1.7";硬编码值是一种不好的做法,并且可能与任何 Windows 更新不兼容。
【解决方案2】:

查看这篇文章: http://www.codeproject.com/Tips/1120263/Virtual-Keyboard-TabTip-integration-in-WPF-on-Win

当任何此类元素获得焦点时,虚拟键盘将打开,当元素失去焦点时,它将关闭。

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
【解决方案3】:

编辑:如果 WindowStyle 设置为 None,请在此处查看我的 answer。对于手动处理触摸键盘外观事件,请查看示例代码here

这里的答案已经很老了,目前触摸键盘在点击任何文本框时都可以正常工作,即使窗口已最大化。

我建议至少定位 .NET 4.6.2 以获得对 Windows 10 中触摸键盘的最佳支持,因为 WPF 中的一个错误已在该版本中修复。 Read more here,向下滚动到 WPF 部分。

您唯一需要做的就是设计您的 XAML,使您的用户界面能够在触摸键盘出现时做出正确反应。通常将您的内容放在ScrollViewer 中就足够了:

<ScrollViewer PanningMode="VerticalOnly"
              VerticalScrollBarVisibility="Hidden" 
              HorizontalScrollBarVisibility="Disabled"
    <!--Content here-->
</ScrollViewer>

但对于更高级的场景,例如将键盘底部的按钮移动到上方,您需要在 ScrollViewer 中更仔细地编写 XAML,例如使用具有动态高度的网格。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    • 2017-06-23
    • 2018-09-02
    • 2015-05-31
    • 2022-06-15
    • 2013-01-22
    • 2016-05-01
    相关资源
    最近更新 更多