c# - 按类型查找 WPF 窗口中的所有控件

标签 c# .net wpf

我正在寻找一种方法来按类型查找 Window 上的所有控件,

例如:查找所有TextBoxes,查找所有实现特定接口(interface)的控件等。

最佳答案

这应该可以解决问题:

public static IEnumerable<T> FindVisualChilds<T>(DependencyObject depObj) where T : DependencyObject
{
    if (depObj == null) yield return (T)Enumerable.Empty<T>();
    for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
    {
        DependencyObject ithChild = VisualTreeHelper.GetChild(depObj, i);
        if (ithChild == null) continue;
        if (ithChild is T t) yield return t;
        foreach (T childOfChild in FindVisualChilds<T>(ithChild)) yield return childOfChild;
    }
}

然后你像这样枚举控件

foreach (TextBlock tb in FindVisualChildren<TextBlock>(window))
{
    // do something with tb here
}

关于c# - 按类型查找 WPF 窗口中的所有控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/974598/

相关文章:

java - 使用 C# Web 服务连接 Android 设备时出错

c# - WPF:如何在运行时更改 CurrentUICulture

wpf - 在单独的线程上从 Excel 读取 WPF 应用程序的性能不佳

c# - 自动生成返回类型为 HttpResponseMessage 的帮助页面

c# - 将一个窗口保持在另一个窗口之上

c# - Button_Click 中的 "sender"(对象发送者...真的是发送者吗?

c# - WCF 服务和线程

.net - "Must Know".NET Architect/Lead 的 IIS 功能

wpf - 如何向 wpf 数据网格添加上下文菜单?

c# - 如何从 PropertyChanged 调用异步方法?