2012-12-05 70 views
0

在XAML中,我創建了CustomWindow。它包含許多嵌套元素。是否存在簡單的方法來獲取所有命名元素(我通過x:Name="SomeName"設置名稱),標記爲公開(我設置修改器通過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));