Цикл через дочерние элементы StackPanel в WPF
у меня есть StackPanel
Это полный элементов управления, я пытаюсь перебрать элементы и получить их имена, но кажется, что мне нужно привести каждый элемент к его типу, чтобы получить доступ к его Name
собственность.
но что, если у меня много разных типов в StackPanel, и я просто хочу получить имя элементов?
есть ли лучший способ сделать это?
вот что я пробовал:
foreach (object child in tab.Children)
{
UnregisterName(child.Name);
}
3 ответов
этого должно быть достаточно, чтобы привести к правому базовому классу.
Все, что происходит от 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);
}