如果元素是 DataTemplate 的一部分并且元素的选项卡索引是唯一定义的,是否可以通过其选项卡索引获取元素或设置焦点(例如 TextBox)?
问问题
2096 次
1 回答
4
您可以使用VisualTreeHelper搜索通过模板创建的任何元素。
因此,您可以检查任何现有元素的 TabIndex 并找到您想要的元素(您的 tab-index 确实是独一无二的:)。您还可以在 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
诸如窗口或基本控件之类的根对象在哪里。您将获得所有文本框的列表,并且该列表可以检查选项卡索引或您要检查的任何属性。
请注意,必须在调用此函数之前构建树。在某些情况下,上述模式不起作用,例如列表中的 UI 虚拟化。
于 2011-02-19T09:14:12.520 回答