c# – Windows 8 – 如何關閉觸控鍵盤?
我在C#中開發我的Windows 8應用程式,一個非常令人討厭的事情是,即使所有的文字框都失去了焦點,觸控鍵盤有時會保持在螢幕上.
我閱讀了文章ofollow,noindex" target="_blank">keyboard dismissal logic white paper ,這解釋說,當從控制切換到控制時,鍵盤可以保持開啟,即使控制元件可能不接受鍵盤輸入.這將是我的情況,因為我的所有內容都託管在GridView或ListView中.當用戶點選螢幕上的任何專案時,水龍頭將落在這些控制元件上.這是非常煩人的,因為鍵盤需要一半的螢幕,沒有辦法關閉鍵盤.
我試圖將文字框設定為禁用並且沒有影響.刪除鍵盤的唯一方法是設定焦點在一個按鈕,這是非常黑客.
我以為我需要用“AutomationPeer”做一些事情,但我不清楚究竟要做什麼.有沒有辦法來重寫這個行為?
編輯:
我想出了這一點.目標是更改為whitepaper 中未列出的GridView和GridView專案的控制元件型別.以下是我所做的允許我關閉鍵盤的網格程式碼:
public class KeyboardUnfocusableGridView : GridView { private class KeyboardUnfocusableGridViewAutomationPeer : GridViewAutomationPeer { public KeyboardUnfocusableGridViewAutomationPeer(GridView owner) : base(owner) { } protected override AutomationControlType GetAutomationControlTypeCore() { return AutomationControlType.Custom; } } private class KeyboardUnfocusableGridViewItemAutomationPeer : GridViewItemAutomationPeer { public KeyboardUnfocusableGridViewItemAutomationPeer(GridViewItem owner) : base(owner) { } protected override AutomationControlType GetAutomationControlTypeCore() { return AutomationControlType.Custom; } } private class KeyboardUnfocusableGridViewItem : GridViewItem { protected override AutomationPeer OnCreateAutomationPeer() { var baseItem = base.OnCreateAutomationPeer(); return new KeyboardUnfocusableGridViewItemAutomationPeer(this); } } protected override AutomationPeer OnCreateAutomationPeer() { var baseItem = base.OnCreateAutomationPeer(); return new KeyboardUnfocusableGridViewAutomationPeer(this); } protected override Windows.UI.Xaml.DependencyObject GetContainerForItemOverride() { return new KeyboardUnfocusableGridViewItem(); } }
不幸的是,我需要寫這麼多程式碼來做一個簡單的事情.這絕對不是最佳的,因為我需要為我需要使用的每個ItemsControl這樣做.
您需要做的是將焦點設定為不接受文字輸入的任何控制元件.但是,請注意,如果使用者手動顯示鍵盤(而不是由於TextBox接收到焦點而自動顯示),則鍵盤將保持開啟狀態.
檢視這個關於螢幕鍵盤的很好的線索瞭解更多資訊:
http://stackoverflow.com/questions/12149006/windows-8-how-to-dismiss-touch-keyboard