2011-08-10 4 views
1

다른 wpf usercontrol 요소가 포함 된 wpf usercontrol을 볼 메서드를 작성하려고합니다. 예를 들어 usercontrol 중 하나는 xaml을 사용하여 추가 된 열이있는 DataGrid를 포함합니다. DataGrid의 명명 된 열을 조작 할 수 있기를 원합니다. 리플렉션을 사용하려고하는데 내부 컨트롤을 얻을 수있는 방법을 찾을 수 없습니다. 다른 get 메서드 (GetProeprties, GetMembers, GetFields) 시도했지만 내부 usercontrols 컬렉션을 찾을 수 없습니다. 어떤 아이디어라도 감사 할 것입니다.리플렉션을 사용하여 복합 wpf 컨트롤의 컨트롤을 찾으십시오

답변

3

FindName을 사용해 보셨습니까?

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

편집 :이 간단한 경우에 있지만하지 않을 수 있습니다 중첩 된 UserControls 작동. 재귀를 사용 할 수이있는 경우는, 여기에 몇 가지 스케치 구현의 :

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

@ 크리스에 : 도움 다행 것을, 내가 방금 추가 한 추가 참고 나는 이처럼 단순한 호출이 당신의 경우에 실패 할 것으로 예상했기 때문에 더 복잡한 것으로 들렸다. –

관련 문제