当前位置:  开发笔记 > 编程语言 > 正文

WPF中树视图的级别?

如何解决《WPF中树视图的级别?》经验,为你挑选了2个好方法。

WinForms应用程序中,a的级别treeviewWPF中node.level
的相应命令给出?



1> Jobi Joy..:

您的问题的直接答案是WPF中没有级别属性.

winforms控件和wpf控件之间没有一对一的关系.因为两者的底层架构和用法完全不同.在WPF中,您将一个层次结构数据(LinkedList类型的Datastructure)绑定到TreeView,并将HeirarchicalDataTemplate定义为Treeview.ItemTemplate属性



2> Rhys..:

鉴于这个问题: -

所以当我点击一个节点时,我怎么知道它是哪个级别?有解决方法吗?

这是一个可能的解决方法: -

如果你在一个控件的引用视觉树,可能是从Click事件,那么你可以使用该控件调用这样的功能制定出它在树视图中哪个级别,我已经在过去使用.

private int FindTreeLevel(DependencyObject control)
{
  var level = -1;
  if (control != null)
  {
    var parent = VisualTreeHelper.GetParent(control);
    while (!(parent is TreeView) && (parent != null))
    {
      if (parent is TreeViewItem)
        level++;
      parent = VisualTreeHelper.GetParent(parent);
    }
  }
  return level;
}

此方法将向上走的VisualTree和计算多少TreeViewItem它时,它发现在停止之前控制发现TreeView控制.

如果您需要此提供XAML,例如,一个DataTriggerHierarchicalDataTemplate,那么你可以在一个包这件事IValueConverter


  

  
  ...
     
         
     ...
     
     
        
              
        
    
  

然后使用以下转换器

  public class TreeLevelConverter : IValueConverter
  {
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
      var level = -1;
      if (value is DependencyObject )
      {
        var parent = VisualTreeHelper.GetParent(value as DependencyObject );
        while (!(parent is TreeView) && (parent != null))
        {
          if (parent is TreeViewItem) 
            level++;
          parent = VisualTreeHelper.GetParent(parent);
        }
      }
      return level;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
      throw new System.NotImplementedException();
    }
  }

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有