c# - WPF 中 TreeView 的级别?

标签 c# wpf winforms treeview

WinForms 应用程序中,treeview 的级别由 node.level
指定 WPF中对应的命令是什么?

最佳答案

鉴于问题:-

so when I click a node, how do I know which level it is? is there workaround?

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

如果您在 Visual Tree 中有对控件的引用,可能来自 Click 事件,那么您可以使用该控件来确定它在通过调用我过去使用过的这样的函数来查看 TreeView 。

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 并计算它在找到 TreeView 控件时停止之前找到了多少个 TreeViewItem 控件。

如果您需要在 XAML 中使用它,例如 HierarchicalDataTemplateDataTrigger,那么您可以将其打包到 IValueConverter 中类

<Window.Resources>
  <local:TreeLevelConverter x:Key="treeLevelConverter"/>

  <HierarchicalDataTemplate DataType="{x:Type local:MyType}" >
  ...
     <Grid ... >
         <TextBlock x:Name="MyControl" ... />
     ...
     </Grid>
     <HierarchicalDataTemplate.Triggers>
        <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Converter={StaticResource treeLevelConverter}}" Value="0" >
              <Setter TargetName="MyControl" Property="Background" Value="Red"/>
        </DataTrigger>
    </HierarchicalDataTemplate.Triggers>
  </HierarchicalDataTemplate>
</Window.Resources>

然后使用下面的转换器

  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();
    }
  }

关于c# - WPF 中 TreeView 的级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/437840/

相关文章:

c# - 如何了解哪个控件已被关注?

c# - 屏幕分辨率和滚动条

c# - 记录应用程序 block - 记录调用者

c# - String.Format 参数空异常

c# - 我可以使用 Paint.NET API 将其嵌入到 Winforms 应用程序中吗?

c# - 在 C# 中列出数组的值

c# - 使用 Linq to 对象,ToDictionary 方法不满足类型要求

WPF 动画窗口可见性更改

c# - 禁用基于绑定(bind)值 WPF 的 ListBox 项的选择

c# - 在 WPF 中动态添加 KeyBindings