通过WPF中的StackPanel子项循环

时间:2013-08-01 09:53:35

标签: c# wpf stackpanel

我有一个充满控件的StackPanel,我试图循环遍历元素并获取它们的名称,但似乎我需要将每个元素转换为其类型以便访问它的{{ 1}}属性。

但是如果我在StackPanel中有很多不同的类型并且我只想获取元素名称呢?

有更好的方法吗?

这是我尝试过的:

Name

3 个答案:

答案 0 :(得分:18)

施放到正确的基类应该足够了。 从FrameworkElement下降的所有内容都有一个Name属性。

foreach(object child in tab.Children)
{
   string childname = null;
   if (child is FrameworkElement )
   {
     childname = (child as FrameworkElement).Name;
   }

   if (childname != null)
      ...

}

答案 1 :(得分:7)

您可以使用适当的类型作为foreach循环变量:

foreach (FrameworkElement element in panel.Children)
{
    var name = element.Name;
}

只要Panel中只有FrameworkElement个派生控件,这就可以正常工作。如果还有其他人(例如仅从UIElement派生),您可以写下:

using System.Linq;
...
foreach (var element in panel.Children.OfType<FrameworkElement>())
{
    var name = element.Name;
}

答案 2 :(得分:2)

使用LINQ:

foreach(var child in tab.Children.OfType<Control>)
{
    UnregisterName(child.Name);
}