WPF 中树视图的级别?
Posted
技术标签:
【中文标题】WPF 中树视图的级别?【英文标题】:the level of a treeview in WPF? 【发布时间】:2010-10-01 01:43:12 【问题描述】:在 WinForms 应用程序中,treeview
的级别由node.level
给出WPF中对应的命令是什么?
【问题讨论】:
【参考方案1】:鉴于问题:-
所以当我点击一个节点时,我怎么知道它是哪一层呢?有解决办法吗?
这是一个可能的解决方法:-
如果您在 Visual Tree 中有对控件的引用,可能来自 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,并在找到 TreeView
控件时停止之前计算它找到了多少 TreeViewItem
控件。
如果您需要在 XAML 中提供此功能,例如,DataTrigger
或 HierarchicalDataTemplate
,那么您可以将其打包到 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();
【讨论】:
【参考方案2】:您的问题的直接答案是 WPF 中没有级别属性。
winforms 控件和 wpf 控件之间没有一对一的关系。因为两者的底层架构和用法完全不同。在 WPF 中,您会将层次结构数据(LinkedList 类型的数据结构)绑定到 TreeView 并将 HeirarchicalDataTemplate 定义到 Treeview.ItemTemplate 属性
【讨论】:
以上是关于WPF 中树视图的级别?的主要内容,如果未能解决你的问题,请参考以下文章