加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 01:35:51 所属栏目:百科 来源:网络整理
导读:我对 WPF比较陌生,所以我理解Styles和setters,但我在这个问题上遇到了麻烦. 我正在使用WPF数据网格,需要显示多个级别的分组.我希望第二和第三组级别比顶级更加缩进. 下面的代码将显示组级别,但它会将它们一个显示在另一个上面,并使它们成为嵌套组级别无法分
我对 WPF比较陌生,所以我理解Styles和setters,但我在这个问题上遇到了麻烦.

我正在使用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>

如何根据级别将组头缩进?

解决方法

如果来自未来的任何人遇到这个.我能够嵌套组并设置它们的样式,这样它们就不会通过执行以下操作而叠加在一起.

将属性添加到CollectionViewSource:

<Window.Resources>
    <CollectionViewSource x:Key="cvs" Source="{Binding TestData}">
        <CollectionViewSource.GroupDescriptions>
            <PropertyGroupDescription PropertyName="TopProperty"/>
            <PropertyGroupDescription PropertyName="SubProperty"/>
        </CollectionViewSource.GroupDescriptions>
    </CollectionViewSource>
</Window.Resources>

然后在DataGrid XAML中,您必须指定2个GroupStyles,第二个将用于嵌套组.我将边距添加到第二组的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,1" Margin="5,0">                                            
                                            <StackPanel   Height="23" Orientation="Horizontal" Margin="3,0" Background="#FFE6E6E6">
                                                <TextBlock FontWeight="Bold"  Text="{Binding Path=Name}" Margin="5,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">
                                <StackPanel   Height="23" Orientation="Horizontal" Margin="3,0" Background="#FFF3F3F3">
                                    <TextBlock FontWeight="Bold"  Text="{Binding Path=Name}" Margin="55,0" Width="100" VerticalAlignment="Center"/>
                                </StackPanel>
                            </Border>
                        </StackPanel>
                    </DataTemplate>
                </GroupStyle.HeaderTemplate>
            </GroupStyle>
</DataGrid.GroupStyle>

我能在这里找到更多:
https://msdn.microsoft.com/en-us/library/ff407126%28v=vs.110%29.aspx

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读