2012-08-31 40 views
0

如果从树中随机选择TreeViewItem,如何检索节点的granddaddy,er根?如何从给定的随机TreeViewItem中获取节点的根节点TreeViewItem

我正在使用它突出显示单击子项时的根。

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

编辑:更新的静止的代码不起作用

+3

的第一个建议:重命名你的方法to'GetSexySugarDaddy'。 :> – varg

回答

2

以root你的意思是 '父' 我猜,

看看TreeViewItem.Parent

UPDATE 看看这个代码:

使用

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; 
    } 
+0

不是直系父母,我的意思是根。 – l46kok

+0

然后你应该递归迭代直到一个treeViewItem没有父 – codeteq

+0

@ I46kok然后循环直到父母为空 –

2


你可以尝试这样的事情:

TreeViewItem root = treeViewItem; 
while(root.Parent != null) 
{ 
    root = root.Parent; 
} 
// now "root" contains the root of you tree... 
+0

请参阅我的更新的编辑。 – l46kok

0

您可以通过父母迭代,直到父为空。那么你有根节点。

TreeNode root = node.Parent; 
while(root != null) 
root = root.Parent; 
+0

请参阅我更新的编辑。 – l46kok

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; 
} 
相关问题