요소가 DataTemplate의 일부이고 요소의 탭 인덱스가 고유하게 정의 된 경우 요소를 가져 오거나 탭에 포커스 (예 : TextBox)를 설정할 수 있습니까?WPF. 그것은 탭 인덱스에 의해 요소에 포커스를 설정하는 방법?
1
A
답변
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 가상화.
예! 그게 내가 필요한거야! 이 얼마나 소중한 기능! 고맙습니다! –