循环我有一个StackPanel
是充满控制,我通过元素试图循环,并得到他们的名字,但似乎我需要给每个元素转换为它的类型,以便访问其Name
财产。通过StackPanel的儿童在WPF
但是如果我有很多不同类型的在StackPanel中,我只是想获得元素的名字吗?
有没有更好的方式来做到这一点?
这里是我试过:
foreach (object child in tab.Children)
{
UnregisterName(child.Name);
}
循环我有一个StackPanel
是充满控制,我通过元素试图循环,并得到他们的名字,但似乎我需要给每个元素转换为它的类型,以便访问其Name
财产。通过StackPanel的儿童在WPF
但是如果我有很多不同类型的在StackPanel中,我只是想获得元素的名字吗?
有没有更好的方式来做到这一点?
这里是我试过:
foreach (object child in tab.Children)
{
UnregisterName(child.Name);
}
这应该足以强制转换为正确的基类。从FrameworkElement
下降 任何事物都有一个名称属性。
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);
}
怎么样'childname =(孩子一样FrameworkElement的)?名称;'? – Default
这是2013年的答案,没有'?'呢。我不会在任何地方翻新。我不确定是否总是更好,这里'((FrameworkElement)child).Name'可能是最优化的形式。 –
是的,我想你是在编辑答案。我看到了日期。 – Default