我必须遍历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个项目(表示智能感知)。
答案 0 :(得分:2)
由于以下行,您的代码无法运行:
controls.Concat(GetAllControls(VisualTreeHelper.GetChild(dependency, loop)));
Concat
是一个LINQ扩展方法,它将返回一个新序列,它是两个序列的串联(原始 - { - 1}}在你的情况下 - 和提供给方法的序列)。您没有将返回的序列分配给任何内容。
您需要的是controls
类的AddRange
方法。将代码行更改为:
List<T>
我认为应该这样做。