2012-08-27 11 views
15

私はC#でWindows 8用のアプリケーションを開発していますが、非常に厄介なことは、すべてのテキストボックスにフォーカスが失われてもタッチキーボードが画面上にとどまることがあることです。Windows 8 - タッチキーボードを解除するには?

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のそれぞれについてこれを行う必要があるので、これは間違いなく最適ではありません。

+0

すべてのコンテンツは、GridViewコントロールまたはリストビュー内にある場合は、あなたがする必要があるすべては、IsHitTestVisibleプロパティを設定されていますfalseにすると、テキストボックスはフォーカスを受け入れることができないため、キーボードはポップアップしません。残念ながら、スクロールも失われます。ただのFYI ... –

+0

素晴らしい解決策、私はこの問題で絶望的でした:)。 ListViewでも同様のテクニックが使えます。 –

+0

解決策を以下の回答に移動して、回答を得られないリストから取り除くことができますか?ありがとう。 –

答えて

3

必要な操作は、テキスト入力を受け付けないコントロールにフォーカスを設定することです。ただし、ユーザーが手動でキーボードを表示した場合(TextBoxがフォーカスを受け取ったために自動的に表示されるのではなく)、キーボードは開いたままになります。詳細は、オンスクリーンキーボードについてのこれは本当に良いスレッド

チェックアウト:

http://social.msdn.microsoft.com/Forums/pl/winappswithcsharp/thread/3c227262-1d2c-4382-9c50-5b71d2b5d823

+0

すべてのコントロールがGridViewまたはListViewにあるため、これは機能しませんでした。既定では、GridViewまたはListViewのコントロールにフォーカスを設定しても、キーボードは閉じられません。私は方法を考え出したと思いますが、私はすぐにここに掲載しています。 – thisnick

+8

すぐに定義しますか? – Spiked3

関連する問題