WPF TreeViewItem 切换按钮可见性

5

我遇到了一个问题,希望有人能帮我解决。我的节点包含一组子节点,这些节点的可见性设置为false。如果所有子节点都不可见,我希望可以禁用TreeViewItem旁边的切换箭头。这可能吗?以下是示例:

<TreeView Margin="10,10,0,13" Name="TreeView1" HorizontalAlignment="Left" VerticalAlignment="Top" Width="194" Height="200">
    <TreeViewItem Header="Cold Drinks">
        <TreeViewItem Header="Coke" Visibility="False"></TreeViewItem>
        <TreeViewItem Header="Pepsi" Visibility="False"></TreeViewItem>
    </TreeViewItem>
</TreeView>

如何使“冷饮”树形视图项隐藏切换箭头?

我不知道有简单的方法。我所知道的唯一方法是更改TreeViewItem的ControlTemplate。这是一个控件模板链接:http://msdn.microsoft.com/en-us/library/ms752048.aspx - Josh
2个回答

2
如果您查看TreeViewItem的默认控件模板,您会发现Toggle按钮的可见性与ItemsControl.HasItems绑定。触发器如下所示 -
<Trigger Property="ItemsControl.HasItems">
  <Setter TargetName="Expander" Property="UIElement.Visibility" Value="{x:Static Visibility.Hidden}" />
     <Trigger.Value>
        <s:Boolean>False</s:Boolean>
     </Trigger.Value>
</Trigger>

因此,作为解决方法,您可以创建自己的Custom Control,它派生自TabItem,并将HasItems绑定到自己的CLR属性,该属性将循环遍历所有子项(TreeViewItems),如果任何项目可见,则返回True,否则返回False如果所有项目都处于隐藏/折叠状态。这样,您的切换按钮将根据触发器自动隐藏。
如果您想了解如何创建自定义控件并将其绑定到CLR属性,则可以参考此链接-
{{link1:WPF TreeView databinding to hide/show expand/collapse icon}}
这与您一直在寻找的内容有些相似。希望这可以帮助到您。

你可能也想看一下这个 - http://www.codeproject.com/KB/WPF/TreeViewWithViewModel.aspx - Rohit Vats

0

在内部(即键盘导航)和默认模板中,TreeViewItem 都依赖于其 HasItems 属性来判断它是否有子项。您可能需要将 TreeViewItem 的 ItemsSource 设置为列表,并过滤掉已折叠的项。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接