我正在尝试以编程方式在 Windows Metro 应用程序上显示/隐藏键盘。我最初认为我可以使用折叠的文本框并将焦点放在它上面。但似乎在此链接中已不允许这样做。该链接还讨论了实现此目的的 AutomationPeer 和 TextAutomationPeer。有没有关于如何使用这些的资源?
提前谢谢PK
我正在尝试以编程方式在 Windows Metro 应用程序上显示/隐藏键盘。我最初认为我可以使用折叠的文本框并将焦点放在它上面。但似乎在此链接中已不允许这样做。该链接还讨论了实现此目的的 AutomationPeer 和 TextAutomationPeer。有没有关于如何使用这些的资源?
提前谢谢PK
从这里:
UI 自动化是开发人员沟通特定 UI 元素是否可以接收文本输入的机制。您必须确保在您的应用程序中设置了适当的辅助功能属性,以便当焦点落在特定 UI 元素上时触摸键盘会知道出现。对于 Windows 提供的控件,这将自动完成,因为默认情况下会设置适当的辅助功能属性,但对于自定义控件和体验,您必须做额外的工作才能正确设置辅助功能属性;请记住,触摸键盘会对这些属性做出反应。
如果您使用 C# 或 C++,请使用 AutomationPeer 对象,特别是 TextAutomationPeer。Windows 8 Release Preview 示例将演示如何在 C# 中执行此操作。请记住,除了具有适当的可访问性设置之外,控件还必须是可编辑的并且能够接收文本以使键盘调用。指出某些东西可以在它不能接收文本时接收文本会误导辅助工具和依赖它们的用户。
为了启用用户驱动的调用,我们跟踪最后一个触摸事件的坐标,并将它们与当前具有焦点的元素的边界矩形的位置进行比较。如果该点包含在边界矩形内,则调用触摸键盘。
所以你不能以编程方式显示键盘。隐藏/显示键盘的适当方法是将控件设置为使用 AutomationPeer 对象接受输入。
从这里开始,如果您将输入控件设置为只读,则它不会触发键盘,因此您可以使用它来控制键盘何时打开。
编辑:
实现文本自动化对等点时需要检查一些事项:
确保您使用真实的触摸设备进行测试,或者使用带有基本触摸模式工具的模拟器进行测试。如果您不这样做,则自动化对等将不会激活,因为它仅由手写笔或触摸输入(而不是鼠标)激活。
确保您的自定义控件实现OnCreateAutomationPeer
如下内容:
protected override AutomationPeer OnCreateAutomationPeer() { return new CustomControl2AutomationPeer(this); }
FrameworkElementAutomationPeer
,ITextProvider
并且IValueProvider
在此处的示例中可以找到更多详细信息。
只需放置一个 TextBox 并将其隐藏即可。设置IsReadOnly = true
并将 TextBox 的选项卡索引设置为 0,因此键盘将专注于该 TextBox 但它意识到 TextBox 是只读的并且不会弹出。:)
如果您添加一个文本框,然后在 Miscellaneos 下选择属性>,则有一个名为 PreventKeyboardDisplayOnProgrammaticFocus 的属性,请检查并设置文本框的焦点,如下所示:
HiddenSearchBox.Focus(FocusState.Programmatic);
这是PowerShell
我用来实现这一目标的小脚本。您可以在 C# 中通过获取服务并根据您的需要启动/停止它来执行相同的操作。
$serv = get-ciminstance win32_service -filter "name = 'TabletInputService'"
# if started stop it
if( $serv.State.equals("Running") ){
Stop-Service TabletInputService
}
# if not set to disabled, disable it
# else set to auto and start
if( !$serv.StartMode.equals("Disabled") ){
Set-Service TabletInputService -StartupType Disabled
"TabletInputService Disabled"
}
else {
Set-Service TabletInputService -StartupType Auto
Start-Service TabletInputService
"TabletInputService Enabled and Started"
}