我有一个StackPanel
充满控件的控件,我试图遍历元素并获取它们的名称,但似乎我需要将每个元素转换为它的类型才能访问它的Name
属性。
但是,如果我在 StackPanel 中有很多不同的类型,而我只想获取元素名称怎么办?
有没有更好的方法来做到这一点?
这是我尝试过的:
foreach (object child in tab.Children)
{
UnregisterName(child.Name);
}
我有一个StackPanel
充满控件的控件,我试图遍历元素并获取它们的名称,但似乎我需要将每个元素转换为它的类型才能访问它的Name
属性。
但是,如果我在 StackPanel 中有很多不同的类型,而我只想获取元素名称怎么办?
有没有更好的方法来做到这一点?
这是我尝试过的:
foreach (object child in tab.Children)
{
UnregisterName(child.Name);
}
转换为正确的基类就足够了。所有的后代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);
}