キーボードフォーカスを与えず に、コードでコンテナまたはフォーカスされた子の論理フォーカスを定義するにはどうすればよいですか?
コントロールがTabキーを使用するか、子に当たらないコンテナの一部をクリックしてフォーカスを取得するときに、どの子がフォーカスを取得するかを制御したいのですが、まだフォーカスがない場合は、実際のフォーカスを与えない(または盗む)ことはしません。それを持っている。
また、キーボードジェスチャを使用して特定の子を選択したり、マウスで子をクリックしたりすることも可能です。
キーボードフォーカスと論理フォーカスのWPFの違いを理解しています。また、要素の場合、キーボードフォーカスがあるということは論理フォーカスがあることを意味しますが、論理フォーカスがあるということは要素がキーボードフォーカスを持っているということではありません。
また、添付プロパティFocusManager.FocusedElementは、このプロパティを定義する要素から開始して、ビジュアルツリーで論理フォーカスを持つ要素を定義することも理解しています。
このプロパティは、FocusManager.IsFocusScopeがtrueに設定されている場合だけでなく、GroupBoxなどのコンテナーにも使用されることに気付きました。
私はWPFフォーカスのトピックについて多くの試み、大量の検索、および読書を行いましたが、これまでのところ成功していません。何が欠けているのか理解できません。
FocusManager.SetFocusedElement
によってもキーボードフォーカスが与えられ、子要素のプロパティFocusableを直前にfalseに一時的に変更します。これは、子がフォーカスを取得した後ではなく、前にフォーカスがなかったときに初めて機能します。
私が達成しようとしていることを説明する例:RadioButtonの単純なグループがあり、ユーザーがフォーカスをこのGroupBoxに移動するときにどのオプションがフォーカスを取得するかをコードで動的に制御したい(通常はオプションありますisChecked=true
)。
<GroupBox Header="Options" Name="myGroupBox"
KeyboardNavigation.TabNavigation="Once"
KeyboardNavigation. DirectionalNavigation="Cycle" >
<StackPanel>
<RadioButton GroupName="g1" Name="opt1" Content="Option _1"/>
<RadioButton GroupName="g1" Name="opt2" Content="Option _2"/>
<RadioButton GroupName="g1" Name="opt3" Content="Option _3"/>
</StackPanel>
</GroupBox>
最後のコメントですが、 ListBoxを使用してオプションの動的リストを実装し、リストのselectedItemをデータコンテキストのプロパティにバインドし、ListBoxItemのスタイルとテンプレートを使用して、アイテムテンプレートのRadioButtonのIsCheckedプロパティをIsSelctedにバインドする方法を知っています。親のListBoxItemのプロパティであり、機能しますが、特定のケースでは、RadioButtonをデータコンテキストのプロパティに直接バインドする必要があります。同時にリストのIsSelectedプロパティにバインドすることはできません。