2

コントロール テンプレート内にコントロールを持つ独自のコントロールを作成するときに、フォーカスを管理する適切な方法は何ですか?


ControlTemplate に 2 つの TextBox を持つ CustomControl があるとします。ユーザーおよび開発者として、次の動作を期待します。

  1. customControl.Focus() を呼び出すと、テンプレートの最初の TextBox がフォーカスを受け取る必要があります。

  2. Tab / Shift+Tab を使用してフォーカスを前後に移動すると、次のように動作することが期待されます。

2.1 ユーザーが、customControl の前にコントロールにフォーカスがある状態で Tab キーを押すと、フォーカスは customControl の最初のテキスト ボックスに移動する必要があります。

2.2 ユーザーがカスタム コントロールの最初のテキスト ボックスにフォーカスがある状態で Shift+Tab を押すと、フォーカスは customControl の前の任意のコントロールに移動する必要があります。


以下、私はすでに試しました:

a. CustomControl を Focusable=false に設定すると、条件 2 が有効になりますが、条件 1 は無効になります。

b. StackOverflow では、コントロール テンプレート内のコントロールにフォーカスを移動する方法に関する質問が何度も出てきます。常に次の解決策を提案します:

<Trigger Property="IsFocused" Value="True">
  <Setter TargetName="PART_TextBox1" Property="FocusManager.FocusedElement" Value="{Binding ElementName=PART_TextBox1}" />
</Trigger>

このソリューションは条件 1 と 2.1 を有効にしますが、条件 2.2 を無効にします。

ご協力いただきありがとうございます :)

4

1 に答える 1