9

プログラムで Windows Metro アプリのキーボードを表示/非表示にしようとしています。最初は、折りたたまれたテキストボックスを使用してフォーカスを設定できると思っていました。しかし、このリンクでは許可されていないようです。このリンクでは、これを実現するための AutomationPeer と TextAutomationPeer についても説明しています。これらの使用方法に関するリソースはありますか?

前もって感謝しますPK

4

5 に答える 5

3

ここから:

UI オートメーションは、開発者が特定の UI 要素がテキスト入力を受け取ることができるかどうかを伝えるメカニズムです。特定の UI 要素にフォーカスが置かれたときにタッチ キーボードが表示されるように、アプリで適切なアクセシビリティ プロパティが設定されていることを確認する必要があります。Windows 提供のコントロールの場合、適切なアクセシビリティ プロパティが既定で設定されているため、これは自動的に行われますが、カスタム コントロールとエクスペリエンスの場合は、アクセシビリティ プロパティを正しく設定するために追加の作業を行う必要があります。タッチ キーボードはこれらのプロパティに反応することに注意してください。

C# または C++ を使用する場合は、AutomationPeer オブジェクト、具体的には TextAutomationPeer を使用します。Windows 8 リリース プレビューのサンプルでは、​​C# でこれを行う方法を示します。コントロールは、適切なアクセシビリティ設定に加えて、編集可能であり、キーボードを起動するためのテキストを受け取ることができる必要があることに注意してください。何かがテキストを受信できないときにテキストを受信できることを示すことは、アクセシビリティ ツールとそれに依存するユーザーを誤解させることになります。

ユーザー主導の呼び出しを有効にするために、最後のタッチ イベントの座標を追跡し、現在フォーカスがある要素の境界四角形の位置と比較します。ポイントが外接する四角形内に含まれている場合は、タッチ キーボードが呼び出されます。

したがって、プログラムでキーボードを表示することはできません。キーボードを非表示/表示する適切な方法は、AutomationPeer オブジェクトを使用して入力を受け入れるようにコントロールを設定することです。

ここから、入力コントロールを読み取り専用に設定すると、キーボードがトリガーされないため、それを使用してキーボードが開くタイミングを制御できる可能性があります。

編集:

テキスト オートメーション ピアを実装する際に確認すべき点がいくつかあります。

  1. 実際のタッチ デバイスでテストするか、ベーシック タッチ モード ツールを使用してシミュレーターを使用してテストしてください。これを行わないと、自動化ピアはスタイラスまたはタッチ入力 (マウスではなく) によってのみアクティブ化されるため、アクティブ化されません。

  2. OnCreateAutomationPeerカスタム コントロールが次のようなものを実装していることを確認してください。

    protected override AutomationPeer OnCreateAutomationPeer() { return new CustomControl2AutomationPeer(this); }

  3. FrameworkElementAutomationPeerAutomation Peer が を実装しITextProviderていることを確認してください。IValueProvider

詳細については、こちらの例をご覧ください。

于 2012-07-24T20:11:26.107 に答える
1

TextBoxを配置して非表示にするだけです。を設定しIsReadOnly = true、TextBoxのタブインデックスを0に設定します。これにより、キーボードはそのTextBoxにフォーカスしますが、TextBoxが読み取り専用であり、ポップアップされないことを認識します。:)

于 2012-10-18T09:24:26.050 に答える
0

質問に役立つと思われるカスタムAutomationPeerの例があります

プログラムによるキーボード ロジックを作成するための優れたガイドです。

それは助けになるかもしれません

于 2015-03-25T01:24:13.577 に答える
0

テキスト ボックスを追加し、[プロパティ] > [その他] を選択すると、PreventKeyboardDisplayOnProgrammaticFocus という名前のプロパティがあり、それを確認して、次のようにテキスト ボックスのフォーカスを設定します。

 HiddenSearchBox.Focus(FocusState.Programmatic);
于 2015-06-12T14:02:26.030 に答える