我有一个使用自动完成系统实现的ComboBox。我的ComboBox包含100多个项目。当用户输入文本时,自动完成系统会打开下拉列表并突出显示最相关的项目。此外,当展开下拉列表时,所有项目都可用(无过滤器)。但最相关的项目始终位于下拉列表的底部。
如果可能的话,我希望它在中间。一个项目可以具有相同的引用,但是另一个项目可以具有相同的引用,这就是为什么我需要在下拉列表中将大多数项目放在中间位置。
有什么想法吗?它并不重要但对他们有用。谢谢!
更新:
这是我的ComboBox打开下拉列表。抱歉,我不得不模糊其元素。如您所见,用户开始在ComboBox中写入引用。自动完成工作正常,但相应的项目位于下拉列表的末尾(在红框中),几乎超出范围。
我希望它会在我的下拉列表中间突出显示,而不是到目前为止。
答案 0 :(得分:1)
您的项目搜索可能效果很好,但您的列表未进行视觉过滤,这意味着它的大小始终保持不变。 它被wpf系统滚动到视图中,但仍显示相关项周围的所有其他项。它位于底部的原因是因为wpf Scrollviewer刚刚完成了将项目滚动到视图中,并且看不到需要将其进一步滚动到中间。
您可以使用CollectionViewSource类。为什么?
使用起来很简单,会保持您的viewmodel数据不变,并且您可以在顶部找到相关的完成项。它可以通过GetDefaultView(..)
获得假设你有一个viewmodel标志“IsHidden”,声明它的内容与用户输入不匹配:
ICollectionView cv= CollectionViewSource.GetDefaultView(myComboBox.ItemsSource);
// switch filter on
cv.Filter = obj => (obj as myViewModel).IsHidden == false;
// switch off
cv.Filter = null