2012-08-31 41 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; 
} 
相關問題