当所有子项都被折叠或隐藏时,如何在分层数据模板中隐藏扩展器

本文关键字:隐藏 分层 数据 扩展器 折叠 | 更新日期: 2023-09-27 17:59:05

我有一个树视图设置如下:

<TreeView ItemsSource="{Binding TreeRoot}" x:Name="HierarchyTreeView">
    <TreeView.ItemContainerStyle>
        <Style TargetType="{x:Type TreeViewItem}>
            <Setter Property="Visibility" Value="{Binding IsVisible, Converter={...}}" />
            ...
        </Style>
    </TreeView.ItemContainerStyle>
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Children}">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Name}" ... />
            </StackPanel>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

用户可以在树视图中隐藏项目。但是,当节点下所有项的可见性都设置为CollapsedHidden时,扩展器将保留。

当每个孩子在项目下的可见性都设置为隐藏或折叠时,有什么方法可以隐藏扩展器吗

当所有子项都被折叠或隐藏时,如何在分层数据模板中隐藏扩展器

我遇到了这个问题。我看到有一些答案,你需要在树视图项目样式中进行更改,这需要你编辑默认样式。然而,就像上面的情况一样,我也只需要在隐藏节点项时使扩展器不可见。一个简单的方法是默认情况下展开所有节点,并在树视图项样式的datatrigger中使用一个属性来设置树视图项的可见性。我就是这样做到的。

<Style x:Key="myTreeItemtyle" TargetType="{x:Type TreeViewItem}">
        <Setter Property="IsExpanded" Value="True"/>     
        <Style.Triggers>
          <DataTrigger Binding="{Binding IsVisible}" Value="True">
            <Setter Property="Visibility" Value="Visible"/>
          </DataTrigger>
          <DataTrigger Binding="{Binding IsVisible}" Value="False">
            <Setter Property="Visibility" Value="Collapsed"/>
          </DataTrigger>
        </Style.Triggers>
      </Style>

现在,使用这个样式作为树状视图项目容器样式:

<TreeView Name="treeView" ItemsSource="{Binding TreeItems}" ItemContainerStyle="{StaticResource myTreeItemtyle}" BorderThickness="0"/>