【问题标题】:WPF TreeViewItem Toggle Button visibilityWPF TreeViewItem 切换按钮可见性
【发布时间】:2011-12-15 21:26:41
【问题描述】:

我遇到了一个问题,希望有人能帮我解决。我遇到了这样一种情况,即我的节点包含一组可见性设置为 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 隐藏切换箭头?

【问题讨论】:

标签: c# wpf wpf-controls


【解决方案1】:

如果您看到 TreeViewItem 的默认 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),如果任何项目可见,则返回 True 或如果所有项目都处于隐藏/折叠状态,则为 False。这样,您的切换按钮将根据触发器自动隐藏。

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

WPF TreeView databinding to hide/show expand/collapse icon

这与您一直在寻找的内容有些相同。希望这会有所帮助..

【讨论】:

【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2013-05-13
    • 2014-06-08
    • 2011-03-31
    • 2012-04-28
    • 2011-09-10
    • 1970-01-01
    • 2012-12-14
    • 2012-05-31
    • 2017-12-18
    相关资源
    最近更新 更多