wpf listview потерял фокус - PullRequest
10 голосов
/ 09 апреля 2009

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

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

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

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

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

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

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

Я обнаружил, что выбранный мной индекс списка отличается от целевого элемента. кто ???

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

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

мой просмотр списка изменен:

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

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

привет

1 Ответ

6 голосов
/ 25 мая 2009

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...