Список wpf потерял фокус

У меня есть странное поведение элемента управления ListView в WPF.

Мы разрабатываем приложение на С#.

Я создал ListView с некоторыми элементами и установил SelectedIndex в некоторый индекс в в середине списка. Затем я щелкнул мышью в любом месте в ListView и затем перейдите с помощью клавиш Up/Dows, все работает отлично. Но если Я перемещаю фокус на другой элемент управления, а затем пытается вернуть фокус обратно в ListView управляйте программно, тогда у меня проблема.

ListView получает фокус, но когда я пытаюсь перемещаться с помощью клавиатура, текущий выбор будет отменен, и первый элемент будет выбрано и навигация начнется с первого элемента в списке.

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

Похоже, что даже элемент управления ListView находится в фокусе, но на самом деле нет элементов focus, даже если SelectedIndex имеет некоторые допустимые значения.

Пожалуйста, помогите! Как я могу настроить фокус на элемент управления ListView программно предотвратить такое поведение?

Я узнаю, что мой список избранных индексов отличается от выбранного объекта. кто???

в событии selectedindex_changed я устанавливаю выбранный индекс в элемент исправления (5), но когда я нажимаю клавиши со стрелками, элемент был изменен. это означает, что выбранный индекс зафиксирован на 5, но текущий элемент (показанный с помощью точечной границы вокруг него) перемещается в положение стрелки. в любом случае мой selecteditem исправляется до 5, но мои scrollviews перемещаются в положение, в котором находится текущий элемент.

этот код находится в listView1_SelectionChanged: listView1.SelectionMode = SelectionMode.Single;           listView1.SelectedIndex = 5;

у моего списка есть измененное представление:                                                                                             

    <l:PlainView x:Key="tileView"
            ItemTemplate="{StaticResource centralTile}"
            ItemHeight="120" ItemWidth="130" />

Я больше не знаю о проблеме.

рассматривает

Ответ 1

ListView, вероятно, страдает от той же проблемы, что и ListBox, поскольку он может иметь фокус независимо от его элементов.

Когда я хочу сфокусировать ListBox, мне нужно сделать что-то вроде этого:

listBox1.Focus();
if (listBox1.Items.Count > 0)
{
    var index = listBox1.SelectedIndex;
    if (index < 0) index = 0;

    var item = listBox1.ItemsContainerGenerator
                   .ContainerFromIndex(index) as ListBoxItem;
    item.Focus();
}

Итак, это фокусирует ListBox, но тогда, если ListBox содержит какие-либо элементы, он фокусирует либо выделенный элемент, либо первый элемент, если он выбран.

Я никогда не использовал ListView в WPF, но предположительно вы могли бы взломать подобный метод, используя ListView вместо ListBox и ListViewItem вместо ListBoxItem.