当所有子项都折叠或隐藏时,如何在分层数据模板中隐藏扩展器?
Posted
技术标签:
【中文标题】当所有子项都折叠或隐藏时,如何在分层数据模板中隐藏扩展器?【英文标题】:How do I hide expander in Hierarchical Data Template when all children are collapsed or hidden? 【发布时间】:2014-06-03 02:20:12 【问题描述】:我有一个像这样设置的树视图:
<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
时,扩展器仍然存在。
当每个孩子在项目下的可见性设置为隐藏或折叠时,有什么方法可以隐藏扩展器?
【问题讨论】:
您可以在扩展器上设置可见性,然后用户将如何扩展它。 他们不会扩展它。如果没有一个孩子是可见的,那么扩展将毫无用处。没有子项的扩展器也可能使用户在展开某个项目时却发现没有子项时认为程序以某种方式出现故障。 将 Expandar 上的可见性设置为折叠状态。所以一旦他们崩溃,他们就再也回不去了?用户永远不会折叠 TreeView 然后想回来看看孩子。 【参考方案1】:我遇到了这个问题并遇到了这个问题。我看到有一些答案,您需要在树视图项目样式中进行此更改,这需要您编辑默认样式。 但是,就像上面的情况一样,我也只需要在隐藏节点项时不显示扩展器。 一种简单的方法是默认展开所有节点,并使用 datatrigger 中的属性为 treeviewItem 样式设置 treeview 项目的可见性。 这就是我能够实现它的方式。
<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"/>
【讨论】:
以上是关于当所有子项都折叠或隐藏时,如何在分层数据模板中隐藏扩展器?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Xamarin Forms 中滚动时折叠(隐藏或向上滑动)导航栏(标题栏)?
当collectionView折叠时隐藏collectionView内容