WPF TreeViewItem切换按钮可见性

Eti*_*nne 5 c# wpf wpf-controls

我遇到了一个问题,我希望有人可以帮我解决.我遇到了一个案例,我的节点包含一组可见性设置为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>
Run Code Online (Sandbox Code Playgroud)

我如何获得Cold Drinks TreeViewItem来隐藏切换箭头?

Roh*_*ats 2

如果您看到 TreeViewItem 的默认 controlTemplate,您将看到切换按钮的可见性绑定到 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>
Run Code Online (Sandbox Code Playgroud)

因此,作为一种解决方法,您可以创建自己的从 TabItem 派生的自定义控件,并将 HasItems 与您自己的 CLR 属性绑定,该属性将循环遍历您的所有 childItems(TreeViewItems),并且如果任何 Item 可见则返回 True,如果所有 Item 可见则返回 False项目处于隐藏/折叠状态。这样您的切换按钮将根据触发器自动隐藏。

如果你想知道如何创建自定义控件并将其绑定到你的 CLR 属性,你可以参考这个 -

WPF TreeView 数据绑定以隐藏/显示展开/折叠图标

这与您一直在寻找的东西有些相同。希望这可以帮助..