Фокус WPF listbox без изменения выбранного элемента


Listbox в 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 работает полностью, только если не перемещать фокус при загрузке usercontrol

Я хочу сфокусировать первый элемент в usercontrol, когда я возвращаюсь к элементу управления (используя Prism navigation), который оказывается списком.

Но когда я добавляю следующую строку, то каждый раз, когда я перемещаюсь назад, выделение сбрасывается на первый элемент, видимый как синяя подсветка-выделение не остается на ранее выбранном пункт.

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

Без строки все работает, за исключением того, что список не имеет фокуса клавиатуры (серая подсветка ранее выбранного элемента списка, а не синяя подсветка).

Кроме того, проблема возникает только в том случае, если я сосредоточился на другом списке перед перемещением вперед, то есть есть два списка, и если я остаюсь на первом списке перед перемещением вперед, то правильный выбор сохраняется даже с помощью movefocus?

1   3   2012-07-18 19:22:30

1 ответ:

Попробуйте установить фокус на выбранном элементе вашего списка на загруженном событии, как это -

Loaded += ((sender, e) =>
{
   ListBoxItem item = myListbox.ItemContainerGenerator.ContainerFromItem(myListbox.SelectedItem) as ListBoxItem;
   item.Focus();
});