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来隐藏切换箭头?
如果您看到 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 数据绑定以隐藏/显示展开/折叠图标
这与您一直在寻找的东西有些相同。希望这可以帮助..