WPF。如何通过元素的选项卡索引将焦点设置在元素上?

标签 wpf focus tabindex

如果元素是 DataTemplate 的一部分并且元素的选项卡索引是唯一定义的,是否可以通过其选项卡索引获取元素或对其设置焦点(例如 TextBox)?

最佳答案

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

关于WPF。如何通过元素的选项卡索引将焦点设置在元素上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5041963/

相关文章:

c# - 组合框 isEditablelostFocus 在获得焦点时调用

wpf - ALT-TAB 始终激活具有多个拥有窗口的 WPF 应用程序中的主窗口

c# - 使用 PostBackOptions.TrackFocus 在回发中保持控制焦点

javascript - 是 tabIndex : 0 in links considered a good practice in order to avoid href ="javascript: void(0);"?

html - 无法设置模态内部元素的tabindex

wpf - 基类 `Application` 在一种解决方案中未被识别为类型

c# - 如何从 View 模型访问不可绑定(bind)的 View 属性?

c# - WPF:从父容器中删除 "yourself"

javascript - 精简 jquery 焦点脚本?

c# - 在 C# winform 中通过 TabIndex 获取元素的文本