2013-08-01 146 views
8

循環我有一個StackPanel是充滿控制,我通過元素試圖循環,並得到他們的名字,但似乎我需要給每個元素轉換爲它的類型,以便訪問其Name財產。通過StackPanel的兒童在WPF

但是如果我有很多不同類型的在StackPanel中,我只是想獲得元素的名字嗎?

有沒有更好的方式來做到這一點?

這裏是我試過:

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

回答

15

這應該足以強制轉換爲正確的基類。從FrameworkElement下降 任何事物都有一個名稱屬性。

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

    if (childname != null) 
     ... 

} 
+0

怎麼樣'childname =(孩子一樣FrameworkElement的)?名稱;'? – Default

+0

這是2013年的答案,沒有'?'呢。我不會在任何地方翻新。我不確定是否總是更好,這裏'((FrameworkElement)child).Name'可能是最優化的形式。 –

+0

是的,我想你是在編輯答案。我看到了日期。 – Default

7

你可能只是使用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; 
} 
2

使用LINQ:

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