14

StackPanel要素をループして名前を取得しようとしていますが、プロパティにアクセスするには、各要素をその型にキャストする必要があるようですName

しかし、StackPanel にさまざまなタイプがあり、要素名だけを取得したい場合はどうすればよいでしょうか?

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

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

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

3 に答える 3

23

適切な基本クラスにキャストするだけで十分です。から派生するものはすべてFrameworkElementName プロパティを持ちます。

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

   if (childname != null)
      ...

}
于 2013-08-01T09:55:51.460 に答える
9

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;
}
于 2013-08-01T09:57:23.637 に答える
2

LINQ の使用:

foreach(var child in tab.Children.OfType<Control>)
{
    UnregisterName(child.Name);
}
于 2013-08-01T09:57:50.670 に答える