Bezdepbonusu7Программирование: статьи и ответы

Вопрос

WPF ListBox устанавливает фокус на первый элемент после потери фокуса

Автор вопроса: Kelly CoxОтветов: 1

Проблема: у меня возникают проблемы с управлением фокусом и выбором элементов в WPF ListBox со встроенным ListBox и некоторым настраиваемым управлением выбором в исходном коде.

Предыстория: "родительскому" ListBox назначается DataTemplate, содержащий "дочерний" ListBox. Я добавил код для перехода с помощью клавиш со стрелками вверх и вниз от родительского ListBoxItem к дочерним элементам и от дочерних элементов обратно к родительским элементам.

При переходе обратно к родительскому элементу, который не является первым элементом в списке первого уровня, фокус всегда устанавливается на первый элемент, и он выбирается, даже если в программе он установлен на не -первый элемент (например, родительский элемент №2). Я проследил код, и фокус и выбор установлены на не первый элемент, но затем всегда получается другое событие для выбора и установки фокуса на первый элемент.

Был еще один случай с stackoverflow, который был похож на то, что я испытывал. Дело в том, что wpf listview потерял фокус. Я попробовал все ответы и ответы в этом случае, и ни один из них не сработал.

Кто-нибудь знает, почему я не могу программно выбрать не первый элемент в родительском ListBox?

  • У меня похожая проблема, вы нашли решение? Я пробовал с ((ListBoxItem) ItemContainerGenerator.ContainerFromItem (SelectedItem)). Focus (), но не преуспел Cinaird 15.06.2011

wpfselectionlistbox

Ответы

Ответ 1 · Daniel Moore

Попробуйте использовать ListBox.IsSynchronizedWithCurrentItem = true, а затем поработайте с представлением коллекции списка (если вы не создаете его явно, вы можете использовать CollectionViewSource.GetDefaultView), чтобы установить текущий элемент (ICollectionView.MoveCurrentTo()).

У селекторов есть гораздо более предпочтительный метод работы с выбранными элементами при работе с представлением коллекции, чем SelectedItem.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы