当前位置:  开发笔记 > 编程语言 > 正文

ListBox组中的垂直分隔符

如何解决《ListBox组中的垂直分隔符》经验,为你挑选了1个好方法。

我有一个ListBox基于这样的属性进行分组的地方:

CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(listbox.ItemsSource);
PropertyGroupDescription groupDescription = new PropertyGroupDescription("CurrentDate");
view.GroupDescriptions.Add(groupDescription);

分组后我想在组之间添加一个垂直分隔符,我写了一个这样的代码:


    
        
            
                
                    
                    
                
            
        
        
            
                
            
        
    

但它看起来像这样:

在此输入图像描述

虽然我想要一个分隔符完全下降,但当我试图增加分隔符的高度时,项目随之下降.



1> Grx70..:
诊断

当你组一个项目ListBox使用CollectionView+ GroupStyle会发生什么是ListBox屏幕列表GroupItem控件,每个代表一组项目.A GroupItem基本上由一个ContentPresenter(用于呈现标题)和一个ItemsPresenter(用于呈现分组项目)放在一个StackPanel.

当您指定时GroupStyle.HeaderTemplate,它将用于ContentTemplate提到的ContentPresenter.因此,如果你增加它的高度,Separator它仍将被包含在ContentPresenter导致它垂直生长,并且物品仍将堆叠在它下面 - 因此你的结果.

为实现目标,您需要做的是重新模板化,GroupItem以便SeparatorContentPresenter和旁边显示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本身.

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有