WPF TreeViewItem切换按钮可见性

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

      

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

如果您看到TreeViewItem的deafult controlTemplate,您将看到Toggle按钮的可见性绑定到ItemsControl.HasItems。 触发器看起来像这样 –

    False   

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

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

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

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

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