我有一个ListBox
基于这样的属性进行分组的地方:
CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(listbox.ItemsSource); PropertyGroupDescription groupDescription = new PropertyGroupDescription("CurrentDate"); view.GroupDescriptions.Add(groupDescription);
分组后我想在组之间添加一个垂直分隔符,我写了一个这样的代码:
但它看起来像这样:
虽然我想要一个分隔符完全下降,但当我试图增加分隔符的高度时,项目随之下降.
当你组一个项目ListBox
使用CollectionView
+ GroupStyle
会发生什么是ListBox
屏幕列表GroupItem
控件,每个代表一组项目.A GroupItem
基本上由一个ContentPresenter
(用于呈现标题)和一个ItemsPresenter
(用于呈现分组项目)放在一个StackPanel
.
当您指定时GroupStyle.HeaderTemplate
,它将用于ContentTemplate
提到的ContentPresenter
.因此,如果你增加它的高度,Separator
它仍将被包含在ContentPresenter
导致它垂直生长,并且物品仍将堆叠在它下面 - 因此你的结果.
为实现目标,您需要做的是重新模板化,GroupItem
以便Separator
在ContentPresenter
和旁边显示ItemsPresenter
,然后使用它进行连线GroupStyle.ContainerStyle
.为方便起见,我们把它放在ListBox.Resources
字典中:
(...) (...)
请注意,我从标题模板中删除了分隔符.
以下是您可能想要获得的结果(我在周围设置了蓝色边框ListBox
以区分#3和#4):
默认情况下,我提供的代码摘录将为您提供#1(所有分隔符在整个范围内垂直拉伸ListBox
).
要实现#2(分隔符仅向下拉伸到相应组的最后一项),您应该添加
到GroupStyle.ContainerStyle
.或者,您可以将其放在模板DockPanel
内部GroupItem
.
要获得#3(分隔符伸展到最大组的高度),您应该添加VerticalAlignment="Top"
到GroupStyle.Panel
(VirtualizingStackPanel
在您的情况下)内的面板.
最后#4(ListBox
本身被限制为最大群体的大小)可以通过将被achievied VerticalAlignment="Top"
的ListBox
本身.