通过WPF中的StackPanel子项循环

use*_*636 11 c# wpf stackpanel

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

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

有没有更好的方法呢?

这是我尝试过的:

foreach (object child in tab.Children)
{
    UnregisterName(child.Name);
}
Run Code Online (Sandbox Code Playgroud)

Hen*_*man 18

它应该足以转换到正确的基类.来自的所有东西FrameworkElement都有一个Name属性.

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

   if (childname != null)
      ...

}
Run Code Online (Sandbox Code Playgroud)


Cle*_*ens 7

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

foreach (FrameworkElement element in panel.Children)
{
    var name = element.Name;
}
Run Code Online (Sandbox Code Playgroud)

只要FrameworkElementPanel 中只有派生控件,这就可以工作.如果还有其他人(如UIElement仅来自),你可以这样写:

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