使用嵌套层次结构迭代WPF-Window的控件

时间:2015-01-23 10:52:01

标签: c# .net wpf

我必须遍历WPF-Window的所有控件(我发现了如何做到这一点),但真正的问题是控件的嵌套结构: 它们都是网格,堆叠面板,TabPages等的一部分......好几次。 我想执行这样的迭代,因为我想实现一种GUI-Linked Settings-System。

我的尝试如下:

public List<Control> GetAllControls(DependencyObject dependency)
    {
        List<Control> controls = new List<Control>();
        for (int loop = 0; loop < VisualTreeHelper.GetChildrenCount(dependency); loop++)
        {
            if (VisualTreeHelper.GetChildrenCount(VisualTreeHelper.GetChild(dependency, loop)) > 0)
                controls.Concat(GetAllControls(VisualTreeHelper.GetChild(dependency, loop)));
            else
                controls.Add((Control)VisualTreeHelper.GetChild(dependency, loop));
        }
        return controls;
    } 

但是,GetChildrenCount始终为0,尽管给定参数有7个项目(表示智能感知)。

1 个答案:

答案 0 :(得分:2)

由于以下行,您的代码无法运行:

controls.Concat(GetAllControls(VisualTreeHelper.GetChild(dependency, loop)));

Concat是一个LINQ扩展方法,它将返回一个新序列,它是两个序列的串联(原始 - { - 1}}在你的情况下 - 和提供给方法的序列)。您没有将返回的序列分配给任何内容。

您需要的是controls类的AddRange方法。将代码行更改为:

List<T>

我认为应该这样做。