当所有子项都被折叠或隐藏时,如何在分层数据模板中隐藏扩展器
本文关键字:隐藏 分层 数据 扩展器 折叠 | 更新日期: 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>
用户可以在树视图中隐藏项目。但是,当节点下所有项的可见性都设置为Collapsed
或Hidden
时,扩展器将保留。
当每个孩子在项目下的可见性都设置为隐藏或折叠时,有什么方法可以隐藏扩展器吗
我遇到了这个问题。我看到有一些答案,你需要在树视图项目样式中进行更改,这需要你编辑默认样式。然而,就像上面的情况一样,我也只需要在隐藏节点项时使扩展器不可见。一个简单的方法是默认情况下展开所有节点,并在树视图项样式的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"/>