2011-08-10 73 views
1

我試圖編寫一個方法來查看包含其他wpf usercontrol元素的wpf usercontrol。例如,其中一個用戶控件包含一個使用xaml添加列的數據網格。我想能夠操縱數據網格中的命名列。我正在嘗試使用反射,並且找不到獲取內部控件的方法。我嘗試了不同的get方法(GetProeprties,GetMembers,GetFields),但找不到內部usercontrols的集合。任何想法,將不勝感激。使用反射來查找複合wpf控件中的控件

回答

3

您是否嘗試過使用FindName

var col = uc.FindName("MyColumn") as DataGridColumn; 

編輯:這個工作在簡單的情況下但它可能不會嵌套的用戶控件。這是你可以用它遞歸的情況下,這裏的一些粗略的實現:

public static object FindNamedObject(FrameworkElement container, string name) 
{ 
    var target = container.FindName(name); 
    if (target == null) 
    { 
     int count = VisualTreeHelper.GetChildrenCount(container); 
     for (int i = 0; i < count; i++) 
     { 
      var child = VisualTreeHelper.GetChild(container, i) as FrameworkElement; 
      if (child != null) 
      { 
       target = FindNamedObject(child, name); 
       if (target != null) 
       { 
        break; 
       } 
      } 
     } 
    } 
    return target; 
} 
+0

完美,忙於使用反射來退一步...謝謝 – Chris

+0

@克里斯:高興的是幫助,我只是增加了一個額外的注正如我預料的那樣,在你的情況下這樣的簡單調用會失敗,聽起來更復雜。 –