在 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 中使用它,例如 HierarchicalDataTemplate
的 DataTrigger
,那么您可以将其打包到 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/