如何在具有多个级别的WPF数据网格中显示分组?

Kei*_*ith 3 c# wpf

我是WPF的新手,所以我了解样式和设置员,但是在此方面遇到了麻烦。

我正在使用WPF数据网格,并且需要显示多个分组级别。我希望第二和第三小组的等级比最高等级的缩进更多。

下面的代码将显示组级别,但是将它们显示在另一个组级别的正上方,并且使它们成为嵌套的组级别这一事实无法分辨。

<Style x:Key="GroupHeaderStyle" TargetType="{x:Type GroupItem}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type GroupItem}">
                <Expander IsExpanded="True">
                    <Expander.Header>
                        <TextBlock Text="{Binding Path=Name}"/>
                    </Expander.Header>
                    <ItemsPresenter />
                </Expander>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)

如何获得基于级别缩进的组标题?

小智 6

如果将来有任何人遇到这个问题。我能够嵌套组并设置其样式,以便通过执行以下操作使它们不会相互堆叠。

将属性添加到CollectionViewSource:

<Window.Resources>
    <CollectionViewSource x:Key="cvs" Source="{Binding TestData}">
        <CollectionViewSource.GroupDescriptions>
            <PropertyGroupDescription PropertyName="TopProperty"/>
            <PropertyGroupDescription PropertyName="SubProperty"/>
        </CollectionViewSource.GroupDescriptions>
    </CollectionViewSource>
</Window.Resources>
Run Code Online (Sandbox Code Playgroud)

然后,在DataGrid XAML中,您必须指定2个GroupStyle,第二个将用于嵌套组。我在第二组的StackPanel中添加了页边距,以将文本向右推,使其看起来像在适当的列中一样。

<DataGrid.GroupStyle>
            <GroupStyle>
                <GroupStyle.ContainerStyle>
                    <Style TargetType="{x:Type GroupItem}">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="{x:Type GroupItem}">
                                    <StackPanel>
                                        <Border Background="#FF959595" BorderBrush="#FF727272" BorderThickness="0,0,0,1" Margin="5,0,0,0">                                            
                                            <StackPanel   Height="23" Orientation="Horizontal" Margin="3,0,0,0" Background="#FFE6E6E6">
                                                <TextBlock FontWeight="Bold"  Text="{Binding Path=Name}" Margin="5,0,0,0" Width="100" VerticalAlignment="Center"/>
                                            </StackPanel>
                                        </Border>
                                            <ItemsPresenter />
                                    </StackPanel>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </GroupStyle.ContainerStyle>
            </GroupStyle>
            <GroupStyle>
                <GroupStyle.HeaderTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <Border Background="#FF959595" BorderBrush="#FF727272" BorderThickness="0,0,0,1" Margin="5,0,0,0">
                                <StackPanel   Height="23" Orientation="Horizontal" Margin="3,0,0,0" Background="#FFF3F3F3">
                                    <TextBlock FontWeight="Bold"  Text="{Binding Path=Name}" Margin="55,0,0,0" Width="100" VerticalAlignment="Center"/>
                                </StackPanel>
                            </Border>
                        </StackPanel>
                    </DataTemplate>
                </GroupStyle.HeaderTemplate>
            </GroupStyle>
</DataGrid.GroupStyle>
Run Code Online (Sandbox Code Playgroud)

我可以在这里找到更多信息:https : //msdn.microsoft.com/zh-cn/library/ff407126%28v=vs.110%29.aspx


Kei*_*ith 0

我已经使用 ICollectionView 和 PropertyGroupDescription 来添加分组,但是,您仍然必须使用 XAML 来描述如何显示分组,否则您将不会获得任何分组的 UI 指示。

我对如何设置 XAML 感兴趣,以便可以表示多个级别的分组,最好是每个组级别有某种缩进或类似的东西......