web-dev-qa-db-ja.com

WPFでStackPanelの子をループする

コントロールでいっぱいのStackPanelがあり、要素をループして名前を取得しようとしていますが、Nameプロパティ。

しかし、StackPanelに多くの異なるタイプがあり、要素名を取得したい場合はどうなりますか?

それを行うためのより良い方法はありますか?

これが私が試したことです:

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

適切な基本クラスにキャストするだけで十分です。 FrameworkElementの子孫はすべて、Nameプロパティを持っています。

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

   if (childname != null)
      ...

}
19
Henk Holterman

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;
}
9
Clemens

LINQの使用:

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