2011-02-18 5 views

답변

3

VisualTreeHelper은 템플릿을 통해 만들어진 모든 요소를 ​​검색 할 수 있습니다.
따라서 기존 요소의 TabIndex를 확인하고 원하는 요소를 찾을 수 있습니다 (탭 색인은 정말 고유합니다 :). 또한 DataTemplate에서 엘레멘트의 이름을 지정하고 이름의 필터를 지정할 수 있습니다.

다음 함수를 사용하면 주어진 유형의 시각적 트리의 모든 요소를 ​​찾을 수 있습니다.

void FindChildFrameworkElementsOfType<T>(DependencyObject parent,IList<T> list) where T: FrameworkElement{    
    DependencyObject child; 
    for(int i=0;i< VisualTreeHelper.GetChildrenCount(parent);i++){    
     child = VisualTreeHelper.GetChild(parent, i); 
     if (child is T) { 
      list.Add((T)child); 
     } 
     FindChildFrameworkElementsOfType<T>(child,list); 
    } 
} 

전화를 다음과 같이 rootObject는 당신의 창 또는 기본 컨트롤로 루트 개체입니다

List<TextBox> textBoxList=new List<TextBox>(); 
FindChildFrameworkElementsOfType<TextBox>(rootObject,textBoxList); 

. 모든 텍스트 상자의 목록을 얻을 수 있으며이 목록은 탭 인덱스 또는 확인할 속성을 확인할 수 있습니다.
이 함수를 호출하기 전에 트리를 빌드해야합니다. 위의 패턴이 작동하지 않는 몇 가지 상황이 있습니다 (예 : 목록에서 UI 가상화.

+0

예! 그게 내가 필요한거야! 이 얼마나 소중한 기능! 고맙습니다! –

관련 문제