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

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

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

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

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

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


person Kelly Cox    schedule 18.02.2011    source источник
comment
У меня похожая проблема, вы нашли решение? Я пробовал с ((ListBoxItem) ItemContainerGenerator.ContainerFromItem (SelectedItem)). Focus (), но не преуспел   -  person Cinaird    schedule 15.06.2011


Ответы (1)


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

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

person Daniel Moore    schedule 09.07.2011