gpt4 book ai didi

c# - 隐藏 TreeView 项目

转载 作者:太空狗 更新时间:2023-10-29 23:21:32 26 4
gpt4 key购买 nike

我一直在尝试从 TreeView 中隐藏项目。我使用自定义数据类型作为源(称为 SettingsMenuItem),它继承自 FrameworkElement(当前为 FrameworkContentElement,否则 TreeView 会错误地呈现它们)。

我的目标是通过将这些 FrameworkElements 的 VisibilityProperty 设置为 CollapsedVisible 来隐藏某些项目(包括他们的 child )。我知道这可以通过从源集合中删除项目来完成。但这不是我想要的。这意味着我必须镜像每个集合以跟踪它的实际项目,绑定(bind)到每个集合以便收到有关 Visibility 更改的通知,并在每次更改时创建一个新集合。为此需要大量开销。

现在我不知道如何才能做到这一点。我认为它与 ItemsGenerator 有关,但我还没有看到任何覆盖它的行为的可能性。我以为 TreeView 能够检测到 Visibility,但显然它不能。作为替代方案,我想到了一个自定义 TreeViewItem(如果需要,甚至可能是 TreeView)——但在这一点上,整个系统的抽象让我不知所措。我不知道从哪里开始,也不知道解决问题实际需要什么。

提示我必须自己更改或实现的内容绰绰有余。一个完整的解决方案会很好。

最佳答案

您可以使用绑定(bind)到树数据节点中的属性(例如“IsVisible”)的数据触发器来执行此操作:

<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="Visibility" Value="Visible" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsVisible}" Value="False">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</TreeView.ItemContainerStyle>

虽然这在技术上回答了您的问题,但我会谨慎对待实际操作。 User3690202 的评论是正确的,这是您通常会通过在 View 模型中进行过滤来做的事情。

关于c# - 隐藏 TreeView 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32684419/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com