【问题标题】:How do you get the level of a treeviewitem in WPF C#?如何在 WPF C# 中获得树视图项的级别?
【发布时间】:2011-03-12 01:47:19
【问题描述】:

如何在 WPF C# 中获取 treeviewitem 的级别?在 Windows 窗体中,treeview 类有一个 .Level 成员,但 WPF C# 似乎没有。

【问题讨论】:

标签: c# wpf treeview treeviewitem


【解决方案1】:

构建视图模型。

与没有它的情况相比,使用树视图时,视图模型为您提供了更大的灵活性。帮自己一个忙,不要走可视化树,如果父节点不可见,它可能会被虚拟化掉,您的级别(或深度)图将是错误的。构建一个视图模型来包装您的数据并知道它处于什么级别。

查看此处发布的答案。

answer link one(您可以在视图模型中添加另一个属性 - 级别)

treeview view model demo

【讨论】:

  • 这看起来相当广泛。在我处理这个问题时,让我问你是否可以在不构建视图模型的情况下进行更简单的操作。在 WPF 中,我可以获得用户单击的树项。完成此操作后,我可以使用“items”成员获取该树项的子项列表。有没有办法获得与父母的链接? treeviewitem 类有某种“继承自”和“继承自”的成员。我该如何利用它?
  • 看看你的问题下的链接,它涉及到遍历可视化树。通常,您要查找的项目将是 TreeViewItem 的 DataContext。
【解决方案2】:

我用转换器做的,因为我想用<style>做它

<DataTrigger Binding="{Binding Parent, RelativeSource={RelativeSource Self}, Converter={StaticResource TreeViewItemConverter}}" Value="1">
         <Setter TargetName="Bd" Property="Background"  Value="Yellow"/>
</DataTrigger>

还有转换器

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if ((value as TreeView) != null)//level 1
            return 0;

        var item = (value as TreeViewItem);
        if (item != null) // level 2 and 3
            return (item.Parent as TreeViewItem)!=null ? 2 : 1;
        return 0;
    }

这对于树视图中的多级样式特别有用

【讨论】:

    猜你喜欢
    • 2010-10-01
    • 2021-12-23
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    相关资源
    最近更新 更多