2014-11-09 5 views
0

내 TreeViewItem을 StackPanel, imagetextblock으로 내부적으로 사용자 정의했습니다. 내부의 TextBlock에 대한 참조를 얻고 싶습니다. 코드가 node 인 경우 TreeviewItem이고 childrenCound =3StackPanel image textblock 일 수 있습니다. 그러나 내부에는 TextBlock을 찾을 수 없습니다. 나는 어떤 콘솔 출력 및 object _itemToMove 반환 nullTreeViewItem 내에서 자식 컨트롤을 얻는 방법?

TreeViewItem node = UIHelper.FindVisualParent<TreeViewItem>(e.OriginalSource as FrameworkElement); 
var child = VisualTreeHelper.GetChild(node, 0); 
int childrenCount = VisualTreeHelper.GetChildrenCount(child); 
for (int i = 0; i < childrenCount; i++) 
{ 
    TextBlock vc = VisualTreeHelper.GetChild(child, i) as TextBlock; 
    if (vc != null) 
    { 
     Console.WriteLine("ggggggggggggggggggggggggggggggggggggggggggggggg"); 

     _itemToMove = vc.Text as object; 
    } 

} 
Console.WriteLine(childrenCount+";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"); 

답변

1

그것은 당신의 TextBlock에가 당신이 생각하는 것보다 더 깊이 매장되어있을 수 있습니다 볼 수 없습니다. 나는 항상 앱의 다른 곳에서 사용하기에 충분히 일반적인 다음 도우미를 사용하여 성공했습니다.

public static T FindVisualChild<T>(DependencyObject obj) where T : DependencyObject 
{ 
    if (obj != null) 
    { 
     for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++) 
     { 
      var child = VisualTreeHelper.GetChild(obj, i); 
      if (child is T) 
      { 
       return (T)child; 
      } 

      T childItem = FindVisualChild<T>(child); 
      if (childItem != null) return childItem; 
     } 
    } 
    return null; 
} 

나는 StackOverflow에서 비슷한 질문을 받았다고 생각합니다.

+0

멋진 직장! 내 문제를 해결! – baozi