我正在尝试将文本输入功能添加到已移植到Windows Store / Phone 8.1的现有DirectX应用程序中。问题是我甚至无法在本文中获得微软提供的示例代码来编译: http://msdn.microsoft.com/en-us/library/windows/apps/jj247546%28v=vs.105%29.aspx
我使用Universal App项目作为基础,我无法访问Windows :: Phone :: UI :: Core(根本没有Core命名空间!)
我试图添加虚拟文本框并将其隐藏在某个地方,但没有运气,因为出现了需要聚焦文本框的软件键盘 - 它获得焦点的那一刻它出现在屏幕上(我们绘制自己的控件所以我不# 39; t想要系统一)尽管事实被设置为透明,前景和背景以及宽度都为0.
如何操作SIP来显示/隐藏和检索键盘输入,而不必破解我的方式通过XAML和东西?
答案 0 :(得分:1)
在Windows Phone(但不是Windows)上,应用可以通过调用InputPane TryShow和TryHide以编程方式请求隐藏和显示InputPane。
如果您希望自动显示InputPane,则需要将焦点设置为控件,该控件将自身标识为自动化系统的文本控件(请参阅MSDN上的Touch Keyboard文档.Windows Phone的工作原理与Windows 8在这里)。
在DirectX应用程序中有两种方法可以执行此操作:
正如其他主题所描述的那样,您可以在DirectX表面上使用Xaml TextBox。这具有易于使用的优点,因为Xaml控件已经实现了全文支持所需的可访问性和IME接口。它具有在DX场景外部的缺点,因此可能需要一些小心的放置它。您无法真正隐藏TextBox并转移输入,但需要使用TextBox进行输入。我更喜欢在Xaml中使用完整的交互式表单,而不是尝试将单个TextBox合并到一个完整的场景中。
另一种选择是在DirectX中实现文本控件。 Windows使用UI Automation API来识别文本控件并与之交互。如果在DirectX中实现TextPattern并将焦点作为控件,那么当用户将焦点设置到它时,键盘将自动调用。在Input: Touch keyboard sample处有一个示例,它演示了自定义Xaml控件上下文中的必要接口。它不会直接应用于DX,但会给出一般的想法。 UI Automation Provider Programmer's Guide有更多关于实现UI自动化接口的深入信息。同样,虽然这些文档以Windows为目标,但它们也适用于Windows Phone。
我不确定哪些代码没有为您编译。链接的页面有点过时(SwapChainPanel现在比SwapChainBackgroundPanel更受欢迎),但所涉及的类和技术应该对Windows Phone Runtime应用程序有效。