2013-08-01 20 views
8

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

しかし、StackPanelにさまざまなタイプがあり、要素名を取得したいのですが?

もっと良い方法がありますか?ここで

は、私が試したものです:

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

答えて

15

右の基底クラスにキャストするのに十分でなければなりません。 FrameworkElementに由来するものにはすべてNameプロパティがあります。

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

    if (childname != null) 
     ... 

} 
+0

;'? – Default

+0

これは2013年の回答ですが、 '?.'まだありません。私はどこにでも改造するつもりはありません。そして、それが常に良いかどうかは分かりません。ここでは、((FrameworkElement)child).Name'が最も最適化されたフォームです。 –

+0

ええ、私はあなたが答えを編集していたので考えました。私はその日を見た。 – Default

7

あなただけのforeachループ変数の適切な型を使用することができます:

foreach (FrameworkElement element in panel.Children) 
{ 
    var name = element.Name; 
} 

これは、長いだけFrameworkElement派生コントロールがパネルであるとして動作します。 LINQを使用して

using System.Linq; 
... 
foreach (var element in panel.Children.OfType<FrameworkElement>()) 
{ 
    var name = element.Name; 
} 
2

::他の人も存在する場合(UIElement由来のような場合のみ)あなたはこれを書くことが

どう `childname =(FrameworkElementのように子)+。名前について
foreach(var child in tab.Children.OfType<Control>) 
{ 
    UnregisterName(child.Name); 
} 
関連する問題