WPF ListBox устанавливает фокус на первый элемент после потери фокуса - PullRequest
5 голосов
/ 18 февраля 2011

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

Справочная информация: «Родителю» ListBox присваивается значение DataTemplate, содержащее «ребенка» ListBox.Я добавил код для навигации с помощью клавиш со стрелками вверх и вниз от родительского ListBoxItem к дочерним элементам и от дочерних элементов к родительским элементам.

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

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

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

Ответы [ 2 ]

0 голосов
/ 10 июля 2011

Я тоже боролся с Фокусом в списках. Возможно, ответы на эти два вопроса помогут вам в дальнейшем. Особенно полезен трюк с настройкой фокуса на фоновом потоке.

Отмените выбор элемента в ListBox

Задержка смены фокуса

0 голосов
/ 10 июля 2011

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

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

...