2014-10-30 33 views
1

我試圖將文本輸入功能添加到正在移植到Windows Store/Phone 8.1的現有DirectX應用程序中。問題是我甚至無法獲得本文中microsoft提供的示例代碼來編譯: http://msdn.microsoft.com/en-us/library/windows/apps/jj247546%28v=vs.105%29.aspx在基於DirectX的應用程序中使用軟件輸入面板

我使用通用應用程序項目作爲基礎,並且我沒有訪問Windows :: Phone :: UI ::核心(根本沒有核心命名空間!)

我試圖添加虛擬文本框,並將它隱藏在某處,但沒有運氣,因此出現軟鍵盤時需要將焦點放在文本框 - 它收到焦點的那一刻出現在屏幕上(我們繪製我們自己的控件,所以我不想讓系統一個),儘管事實上設置爲透明,前景和背景以及寬度都爲0.

我如何操作SIP來顯示/隱藏並從鍵盤檢索輸入,而不必通過XAML和東西來破解我的方式?

回答

1

在Windows Phone(但不是Windows)上,應用程序可以通過調用InputPane以編程方式請求InputPane隱藏和顯示。 TryShowTryHide

如果你想InputPane到,然後自動顯示你需要將焦點設置到其自身標識爲文本控制自動化系統的控制(請參見MSDN上Touch Keyboard文檔。Windows Phone的工作本質上是相同的Windows 8在這裏)。

有兩種方法在一個DirectX應用程序做到這一點:

至於其他線程描述和你試過,你可以在你的DirectX表面的頂部使用的XAML文本框。由於Xaml控件已經實現了全文支持所需的輔助功能和IME界面,因此這具有輕鬆的優勢。它具有DX場景外部的缺點,因此可能需要一定的注意才能很好地放置它。您不能真正隱藏文本框並轉移輸入,但需要使用文本框進行輸入。我更喜歡在Xaml中完成完整的交互式表單,而不是試圖將單個文本框合併到完整的場景中。

另一種選擇是在DirectX中實現文本控件。 Windows使用UI Automation API來識別文本控件並與其進行交互。如果您在DirectX中實現TextPattern並專注於您的控件,那麼當用戶將焦點設置爲焦點時,Keyboad將自動調用。在Input: Touch keyboard sample上有一個示例,演示了自定義Xaml控件上下文中的必要接口。它不會直接應用於DX,但會給出總體思路。 UI Automation Provider Programmer's Guide有更多關於實現UI自動化接口的深入信息。再次,雖然這些文檔針對Windows,但它們也將適用於Windows Phone。

我不確定哪些代碼沒有爲您編譯。鏈接的頁面有點過時(SwapChainPanel現在比SwapChainBackgroundPanel更受歡迎),但涉及的類和技術應該對Windows Phone Runtime應用程序有效。

+0

第二段告訴部分,根本沒有工作 - 我甚至沒有命名空間Windows :: Phone :: UI :: Core(沒有核心,只有輸入)。無論如何,我發現一個更簡單的解決方案,似乎工作正常。我只是放置不透明度爲0的虛擬文本框,並以編程方式進行焦點對焦。此外,我有整個頁面的回調接收字符輸入,並將它們路由到應用程序的輸入系統,它只是工作。不知道這是否是完全有效的解決方案,但比實現接口的bazilion更​​容易... – 2014-10-31 16:21:38

+0

使用Windows.UI.ViewManagement.InputPane.TryShow和TryHide比將焦點設置爲0.0不透明度文本框要乾淨得多。我不確定Windows :: Phone :: UI :: Core在哪裏進入。我沒有看到在鏈接線索或我的文章中提到的任何地方。該名稱空間用於Silverlight應用程序,而不是Windows運行時應用程序,並且不影響InputPane的可見性。 – 2014-10-31 19:05:30

+0

好吧,現在我明白了 - 我的錯,不知何故,我得到了鏈接錯誤... – 2014-11-03 13:21:27

相關問題