Windows 8 在windows8上以编程方式显示/隐藏键盘

Windows 8 在windows8上以编程方式显示/隐藏键盘,windows-8,microsoft-metro,Windows 8,Microsoft Metro,我正在尝试以编程方式显示/隐藏Windows Metro应用程序上的键盘。我最初认为我可以使用一个折叠的文本框并设置焦点。但这似乎是不允许的。该链接还讨论了AutomationPeer和TextAutomationPeer来实现这一点。有关于如何使用这些的资源吗 提前谢谢 主键来自: UI自动化是开发人员进行通信的机制 特定UI元素是否可以接收文本输入。你 必须确保在中设置了相应的辅助功能属性 您的应用程序,以便触摸键盘在聚焦时显示 落在特定的UI元素上。对于Windows提供的控件,此 将自动

我正在尝试以编程方式显示/隐藏Windows Metro应用程序上的键盘。我最初认为我可以使用一个折叠的文本框并设置焦点。但这似乎是不允许的。该链接还讨论了AutomationPeer和TextAutomationPeer来实现这一点。有关于如何使用这些的资源吗

提前谢谢 主键来自:

UI自动化是开发人员进行通信的机制 特定UI元素是否可以接收文本输入。你 必须确保在中设置了相应的辅助功能属性 您的应用程序,以便触摸键盘在聚焦时显示 落在特定的UI元素上。对于Windows提供的控件,此 将自动执行,因为正确的可访问性属性 默认设置,但对于自定义控件和体验,必须执行以下操作 正确设置辅助功能属性的附加工作; 请记住,触摸键盘会对这些属性作出反应

如果使用C++或C++,使用AutoPealPeer-Objor,具体使用TeXTututoMoad。将显示Windows 8版本预览示例 演示如何在C#中执行此操作。请记住,控件还必须 可编辑,并且能够接收文本,以便在 除了具有适当的辅助功能设置之外。指示 当某个东西不能接收文本时,它却可以接收文本,这将导致误导 可访问性工具和依赖它们的用户


为了支持用户驱动的调用,我们跟踪最后一个 触摸事件并将其与边框的位置进行比较 当前具有焦点的元素的。如果该点被包含 在边框内,将调用触摸键盘

因此,无法以编程方式显示键盘。隐藏/显示键盘的适当方法是将控件设置为使用AutomationPeer对象接受输入

从中,如果将输入控件设置为只读,则不会触发键盘,因此可能可以使用该控件来控制键盘何时打开

编辑:

在实现文本自动对等时,需要检查以下几点:

  • 确保您使用真实的触摸设备进行测试,或者使用带有基本触摸模式工具的模拟器进行测试。如果不这样做,自动对等机将不会激活,因为它仅由触笔或触摸输入(而不是鼠标)激活

  • 确保自定义控件实现如下内容:

     HiddenSearchBox.Focus(FocusState.Programmatic);
    
    受保护的覆盖AutomationPeer OnCreateAutomationPeer() { 返回新的CustomControl2AutomationPeer(此); }

  • 确保您的自动化对等机实现了
    FrameworkElementAutomationPeer
    ITextProvider
    IValueProvider

  • 示例中提供了更多详细信息。

    只需放置一个文本框并将其隐藏即可。设置
    IsReadOnly=true
    并将文本框的选项卡索引设置为0,这样键盘将关注该文本框,但它会意识到文本框是只读的,不会弹出。:)

    这里是我用来实现这一点的小
    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"
    }
    
    是一个自定义AutomationPeer的示例,它似乎对这个问题很有帮助

    创建编程键盘逻辑的良好指南


    Holp如果您添加一个文本框,然后在Miscellaneos下选择properties>,有一个名为PreventKeyboardDisplayOnProgrammaticFocus的属性,则可能会有所帮助,请选中该选项,然后按如下方式设置文本框的焦点:

     HiddenSearchBox.Focus(FocusState.Programmatic);
    

    此链接()表示您可以将焦点设置为
    文本控件来显示/隐藏键盘。你到底想做什么?你能提供更多细节吗?如果您使用的是Javascript,是否可以尝试在文本框上放置一个
    div
    ,使其“不可见”,并对输入更改事件做出反应两个链接都谈到无法显示键盘:““这意味着应用程序无法通过操作焦点以编程方式调用触摸键盘。过去这里的罪魁祸首是网页,其中许多网页默认将焦点设置到输入字段中,但在其页面上有许多其他体验供用户享受。但是,我们认为要求用户点击输入字段是一种可以接受的折衷方法。”“为了启用用户驱动的调用,我们跟踪最后一次触摸事件的坐标,并将其与当前具有焦点的元素的边框位置进行比较。如果该点包含在边界矩形内,则会调用触摸键盘。我们试图做的是截取键盘输入并将其发送到服务器,服务器还可以指示客户端显示键盘。我不确定可能重复,但我认为即使automationpeer方法也不起作用。我试过了,但没能成功。我试过在我的Windows8电脑上运行一个带有文本框的metrostyle应用程序。当点击文本框时,触摸键盘不会显示出来。为什么会这样?或者如果它在平板电脑上运行,它会显示出来吗?+1回答得不错。作为参考,另请参见。需要多少时间?我不再做这个产品了,但这似乎有点慢。