问题: 我在使用嵌入式ListBox和后面的代码中的一些自定义选择管理的WPF ListBox中管理焦点和项目选择时遇到了麻烦。
背景
“父级”ListBox
被分配了一个DataTemplate
,其中包含“子级”ListBox
。我添加了代码,使用从父ListBoxItem
到子项的向上和向下箭头键以及从子项返回到父项来导航。
当导航回到不第一级列表框中第一项的父项时,焦点始终设置为第一项并且即使在程序中设置了焦点也会被选中到非第一项(例如,父项#2)。我已经跟踪了代码并且焦点和选择被设置为非第一个项目,但是随后会选择另一个事件来选择并将焦点设置为第一个项目。
stackoverflow上有另一个案例与我遇到的情况类似。案例是wpf listview lost the focus我在这种情况下尝试了所有的答案和答案,但没有一个能够奏效。
有没有人了解为什么我无法以编程方式选择父ListBox
中的非第一个元素?
答案 0 :(得分:0)
尝试使用ListBox.IsSynchronizedWithCurrentItem = true
然后使用列表的集合视图(如果您没有明确创建一个,则可以使用CollectionViewSource.GetDefaultView
)来设置当前项(ICollectionView.MoveCurrentTo()
)。
在使用集合视图时,选择器有一个更优选的处理选定项目的方法,而不是SelectedItem
。
答案 1 :(得分:0)
我也一直在与ListBoxes中的Focus挣扎。也许这两个问题的答案将对您有所帮助。特别是将焦点设置在后台线程上的技巧非常有用。