3

DataTemplate のリストボックス

        <ListBox 
                ItemsSource="{Binding Path=(Duties:IPicker.Choices)}"
                   SelectedValue="{Binding Path=(Duties:IPicker.Selection), 
                   ValidatesOnDataErrors=True, 
                   UpdateSourceTrigger=PropertyChanged, 
                   NotifyOnValidationError=True}">
            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel MaxWidth="{DynamicResource ListWidth}" />
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>
        </ListBox>

SelectedValue バインディングが完全に機能するのは、ユーザー コントロールの読み込み時にフォーカスを移動しない場合のみです

リストボックスであるコントロールに (Prism ナビゲーションを使用して) 戻るときに、usercontrol の最初の要素にフォーカスしたいと考えています。

しかし、次の行を追加すると、戻るたびに、選択が最初の項目にリセットされ、青いハイライトとして表示されます。選択は、以前に選択した項目にとどまりません。

Loaded += (sender, e) => 
        control.MoveFocus(new TraversalRequest(FocusNavigationDirection.First));

この行がなくても、リストボックスにキーボード フォーカスがないことを除いて、すべてが機能します (青色のハイライトではなく、以前に選択したリストボックス項目の灰色のハイライト)。

また、問題は、前方に移動する前に別のリストボックスに焦点を合わせた場合にのみ発生します。つまり、2つのリスボックスがあり、前方に移動する前に最初のリストボックスにとどまると、移動フォーカスがあっても正しい選択が保持されますか?

4

1 に答える 1

4

次のように、ロードされたイベントでリストボックスの選択されたアイテムにフォーカスを設定してみてください-

Loaded += ((sender, e) =>
{
   ListBoxItem item = myListbox.ItemContainerGenerator.ContainerFromItem(myListbox.SelectedItem) as ListBoxItem;
   item.Focus();
});
于 2012-07-20T18:30:40.463 に答える