我遇到了一个问题我希望有人可以帮我解决。我遇到了一个案例,我的节点包含一组可见性设置为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>
我如何让Cold Drinks TreeViewItem隐藏切换箭头?
答案 0 :(得分:2)
如果您看到TreeViewItem的deafult controlTemplate,您将看到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>
因此,作为一种变通方法,您可以创建自己的自定义控件派生自TabItem并将您的HasItems绑定到您自己的CLR属性,该属性将循环遍历您的所有childItems(TreeViewItems),如果任何Item可见或将返回True如果所有项目都处于隐藏/折叠状态,则返回false。这样,您的切换按钮将根据Trigger自动隐藏。
如果你想知道如何创建自定义控件并将其绑定到你的CLR属性,你可以参考这个 -
WPF TreeView databinding to hide/show expand/collapse icon
这与您一直在寻找的有些相同。希望这会有所帮助..
答案 1 :(得分:0)
内部(即键盘导航)和默认模板 TreeViewItem 依赖于 HasItems 属性来了解它是否有子节点。您可能需要将TreeViewItem的ItemsSource设置为列表并过滤掉折叠的项目。