StackPanel
要素をループして名前を取得しようとしていますが、プロパティにアクセスするには、各要素をその型にキャストする必要があるようですName
。
しかし、StackPanel にさまざまなタイプがあり、要素名だけを取得したい場合はどうすればよいでしょうか?
それを行うより良い方法はありますか?
これが私が試したことです:
foreach (object child in tab.Children)
{
UnregisterName(child.Name);
}
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);
}