2012-12-05 4 views
0

XAML에서 CustomWindow을 만들었습니다. 중첩 된 요소가 많이 포함되어 있습니다. 단순히 이름이 지정된 요소 (나는 x:Name="SomeName"을 통해 이름을 설정 함)를 public으로 표시하는 간단한 메서드가 존재합니까 (x:FieldModifier="public"을 통해 한정자를 설정 했습니까?)?WPF : 창에있는 모든 명명 된 요소 가져 오기

답변

1

내가 알고있는 상자 방법은 없습니다. 당신은 VisualTreeHelper를 사용하여 VisualTree을 찾아 그들이 당신이 interrested하는 속성을 가지고 있는지 확인해야 다음

는 당신이 필요로 할 수있는 방법이다.

public static IEnumerable<FrameworkElement> FindVisualChildren(FrameworkElement obj, Func<FrameworkElement, bool> predicate) 
{ 
    if (obj != null) 
    { 
     for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++) 
     { 
      var objChild = VisualTreeHelper.GetChild(obj, i); 
      if (objChild != null && predicate(objChild as FrameworkElement)) 
      { 
       yield return objChild as FrameworkElement; 
      } 

      foreach (FrameworkElement childOfChild in FindVisualChildren(objChild as FrameworkElement, predicate)) 
      { 
       yield return childOfChild; 
      } 
     } 
    } 
} 

사용법에 대한 그런 일이 될 수 수표 만 :

var children = FindVisualChildren((FrameworkElement)sender, o => !string.IsNullOrEmpty(o.Name));