从树中给出一个随机的TreeViewItem,如何检索该节点的granddaddy,er?
我使用它来点击子项目时突出显示根目录。
private void TreeViewDecode_PreviewMouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
TreeViewItem treeViewItem = GetSexyGrandDaddy(e.OriginalSource as DependencyObject);
...
}
private static TreeViewItem GetSexyGrandDaddy(DependencyObject source)
{
if (source != null && source is TreeViewItem)
{
TreeViewItem root = VisualTreeHelper.GetParent(source) as TreeViewItem;
while (root.Parent != null)
{
root = root.Parent as TreeViewItem;
}
return root as TreeViewItem;
}
return null;
}
编辑:更新的代码仍无效
答案 0 :(得分:2)
用root你的意思是'父'我猜,
<强>更新强> 看看这段代码:
使用
e.Source
而不是
e.OrginalSource
private void treeView1_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
TreeViewItem treeViewItem = GetSexyGrandDaddy(e.Source as DependencyObject);
if (treeViewItem != null)
{
//do highlight...
}
}
private static TreeViewItem GetSexyGrandDaddy(DependencyObject source)
{
TreeViewItem sugarDad = source as TreeViewItem;
if (sugarDad != null)
{
while (sugarDad.Parent as TreeViewItem != null)
sugarDad = sugarDad.Parent as TreeViewItem;
}
return sugarDad;
}
答案 1 :(得分:2)
你可以尝试这样的事情:
TreeViewItem root = treeViewItem;
while( root.Parent != null )
{
root = root.Parent;
}
// now "root" contains the root of you tree...
答案 2 :(得分:0)
您可以遍历父项,直到父项为空。然后你有了根节点。
TreeNode root = node.Parent;
while(root != null)
root = root.Parent;
答案 3 :(得分:0)
试试这个
private static TreeViewItem GetSexyGrandDaddy(DependencyObject source)
{
if (source != null && source is TreeViewItem)
{
TreeViewItem root = source as TreeViewItem;
var parent = VisualTreeHelper.GetParent(root);
while (parent != null)
{
if (parent is TreeViewItem) root = parent as TreeViewItem;
parent = VisualTreeHelper.GetParent(parent);
}
return root as TreeViewItem;
}
return null;
}