Список 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.