如何使WPF输入控件在触摸屏中获得焦点时显示虚拟键盘

27 wpf wpf-controls touch

对于我们的WPF应用程序,当它在触摸屏(Surface Pro .etc)运行时,TextBox/ PasswordBoxcontrol 在聚焦时无法显示虚拟键盘.

在WPF中实现此功能的任何好方法?


更新:

我们最终想要实现的是这样的:

如果用户在PC上运行app,我们不关心这个功能,这意味着用户是否有物理键盘,我们什么都不做就像在PC上运行的普通WPF应用程序一样.

如果用户在Surface Pro上运行,当他点击它时TextBox,内置虚拟键盘可以显示,并且应该是用户友好的,例如键盘永远不会掩盖输入元素.


更新2:

那么,WPF不能轻易设置一些属性来实现这个功能吗?在我看来,这个功能应该是内置的WPF,我不明白为什么我找不到一个简单的方法来实现.

Sav*_*kar 26

试试这个,

首先检查物理键盘的存在:

KeyboardCapabilities keyboardCapabilities = new Windows.Devices.Input.KeyboardCapabilities();
return  keyboardCapabilities.KeyboardPresent != 0 ? true : false;
Run Code Online (Sandbox Code Playgroud)

如果找不到物理键盘,请使用Windows的内置虚拟键盘:

Process.Start(Environment.GetFolderPath(Environment.SpecialFolder.System) + Path.DirectorySeparatorChar + "osk.exe");
Run Code Online (Sandbox Code Playgroud)

从这里得到帮助: 链接1 链接2

  • 此命名空间仅存在于WinRT框架中.有没有相当于普通的.Net WPF? (10认同)

Dmi*_*lin 6

我发布了一个关于如何在用户点击文本框时在WPF应用程序中触发触摸键盘的示例,其位于:

http://code.msdn.microsoft.com/Enabling-Windows-8-Touch-7fb4e6de

这已经是我多年来一直在努力的事情,我很高兴最终将这个例子贡献给我们的社区.如果示例问答窗格中有任何问题,建议,问题等,请告诉我们

  • 工作得很好,但它禁用ScrollViewer之类的滚动控件.我最终使用EventManager.RegisterClassHandler()在GotFocus上启动了tabtip.exe. (2认同)

小智 5

我创建了一个库来自动化 WPF 应用程序中有关 TabTip 集成的所有内容。

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

TabTipAutomation.BindTo<TextBox>();
Run Code Online (Sandbox Code Playgroud)

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

欲了解更多信息,请参阅项目网站