WPF。如何通过它的选项卡索引设置对元素的关注?

时间:2011-02-18 13:40:06

标签: wpf focus tabindex

如果元素是DataTemplate的一部分并且元素的tab索引是唯一定义的,那么是否可以通过它的tab索引获取元素或设置焦点(例如TextBox)?

1 个答案:

答案 0 :(得分:3)

您可以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虚拟化。