我有一个WPF Datagrid,它具有3种分组级别的Collection View Source。

我已将datagrid设置为使用3个扩展器的样式,使其看起来像这样:

Level 1 Expander
<content>
    Level 2 Expander
    <content>
        Level 3 Expander
        <content>

2级和1级只是组的标题

我有第二个控件,该控件允许用户显示和隐藏3级项目,方法是将3级扩展器绑定(bind)到后面的对象中的 bool “IsVisible”属性。
       <!--  Style for groups under the top level. this is the style for how a sample is displayed  -->
        <GroupStyle>
            <GroupStyle.ContainerStyle>
                <Style TargetType="{x:Type GroupItem}">
                    <Setter Property="Margin" Value="0,0,0,0" />
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type GroupItem}">

                                <!--  The parent control that determines whether or not an item needs to be displayed. This holds all of the sub controls displayed for a sample  -->
                                <Expander Margin="2"
                                          Background="{Binding Path=Name,
                                                               Converter={StaticResource SampleTypeToColourConverter}}"
                                          IsExpanded="True"
                                          Visibility="{Binding Path=Items[0].IsVisibleInMainScreen,
                                                               Converter={StaticResource BoolToVisibilityConverter}}">

这种方法幻想得很好。

如何

如果用户取消选择3级扩展器中的所有项目,则2级扩展器标题仍显示,这意味着宝贵的房地产用完了,显示了没有可见数据的组的标题。

我想要的是一种将2级扩展器的可见性绑定(bind)到其子控件的方法,并说“如果所有子级都可见,则显示该扩展器,否则将其折叠”

这可能吗?

最佳答案

我找到了一种相当简单干净的方法来实现您的目标,但是还不够完美。如果您没有太多的组,这应该可以解决问题。

我刚刚将此触发器添加到GroupItem ControlTemplate:

<ControlTemplate.Triggers>
    <DataTrigger Binding="{Binding ElementName=IP, Path=ActualHeight}" Value="0">
        <Setter Property="Visibility" Value="Hidden"/>
        <Setter Property="Height" Value="1"/>
    </DataTrigger>
</ControlTemplate.Triggers>

ItemsPresenter(IP)ActualSize降至零时,它将几乎折叠 header 。

为什么差不多?

当控件被初始化并且在绑定(bind)发生之前,ItemPresenter ActualHeight为0,并且当Visibility设置为Collapsed时,ItemPresenter根本不会被渲染。

使用Visibility.Hidden可以使ItemsPresenter进入渲染阶段并进行测量。
我成功地将Height降为.4 px,但我怀疑这取决于设备。

关于c# - 当所有内容折叠时隐藏扩展器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32886594/

10-10 07:00