在WPF中循环StackPanel子级

本文关键字:StackPanel 子级 循环 WPF | 更新日期: 2023-09-27 18:25:57

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

但是,如果我在StackPanel中有很多不同的类型,并且我只想获得元素名称,该怎么办?

有更好的方法吗?

以下是我尝试过的:

foreach (object child in tab.Children)
{
    UnregisterName(child.Name);
}

在WPF中循环StackPanel子级

它应该足以转换到正确的基类。从FrameworkElement派生的所有内容都具有Name属性。

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

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

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

只要"面板"中只有FrameworkElement派生控件,这就可以工作。如果还有其他(如仅从UIElement派生),您可以这样写:

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

使用LINQ:

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