Вы можете 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);
}
}
Вызовите егоследующим образом:
List<TextBox> textBoxList=new List<TextBox>();
FindChildFrameworkElementsOfType<TextBox>(rootObject,textBoxList);
Где rootObject
- корневой объект, такой как ваше окно или базовый элемент управления.Вы получите список всех текстовых полей, и этот список может быть проверен для tab-index или любого свойства, которое вы хотите проверить.
Позаботьтесь о том, чтобы дерево было построено перед вызовом этой функции.Кроме того, существуют некоторые обстоятельства, при которых вышеуказанный шаблон не работает, например, при виртуализации пользовательского интерфейса в списках.