コントロールでいっぱいの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);
}