ここに私のUIのスクリーンショットがあります。 ItemsControlの項目にフォーカスを強制するにはどうすればよいですか?
すべてのバインドされた質問オブジェクトのリストに:
class Question
{
public Answer[] Answers { get; set; }
public string Text { get; set; }
}
class Answer
{
public bool IsSelected { get; set; }
public string Text { get; set; }
}
それは私が友人のために書いている例えばだ、と私はまだ相対MVVMの初心者です。 (回答にIsSelectedのようなUIコンセプトを持つのは正しくないと分かっていますが、それは友人を混乱させることなく機能します)。私はPageUpキーとPageDownキーは、質問を移動する設定の入力バインディングを持っている
<DataTemplate x:Key="question" DataType="{x:Type local:Question}">
<Grid>
<Grid.RowDefinitions> ... </Grid.RowDefinitions>
<TextBlock Text="{Binding Text}" />
<ItemsControl Grid.Row="1"
ItemsSource="{Binding Answers}" >
<ItemsControl.ItemTemplate>
<DataTemplate>
<RadioButton Content="{Binding Text}"
GroupName="Answer"
IsChecked="{Binding IsSelected}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</DataTemplate>
:右側には、これとのContentPresenterはDataTemplateを切り取らです。質問が変更されたら、右側のラジオボタン(好きなものがあれば選択されているもの)のどれかをフォーカスしたいと思います。目標は、上下の矢印キーを使用して回答を選択し、PageUp/PageDownを使用して質問間を移動することです。
ラジオボタンにタブすることができ、矢印キーが機能しますが、スペースを押して選択すると、回答のフォーカスがリストボックスに戻ります。正直なところ、リストボックスには全く焦点が当てられずに済むはずです。 Focusableにfalseを設定すると、ラジオボタンの中にフォーカスが置かれているように見えますが、IsTabStopをFalseに設定しても、Tabキーはリストボックス内でフォーカスを得ることができます。
悪い古いWinFormsでは、最初のラジオボタンを見つけたリストボックスのSelectedIndexChangedハンドラがあり、GotFocusハンドラと一緒に焦点を合わせ、ホットポテトのようにフォーカスを外しました。ラジオボタンはテンプレートの一部なので、私はそれを行うための明確でエレガントな道筋は見当たりません。私が望む行動をどうやって得ることができますか? "あなたのUIを再設計する"というのは、仕事が終わっても受け入れられる答えですが、コードビハインドを最小限に抑えた解決策を望んでいます。あまりにも多くのWinFormsを思い出させます。
私はドン」それがどのように役立つか見てください。その技術を使用するには、要素へのアクセスが必要です。私はそれがDataTemplateによって生成されているためアクセスできません。私は何が欠けている。 – OwenP
あなたはGrid.Rowに焦点を当てようとする可能性があります – Yahia
これを行う別の方法はhttp://stackoverflow.com/questions/570194/focus-datatemplate-in-wpf/582843#582843を参照してください – Yahia