2013-08-01 22 views
8

Denetimlerle dolu bir StackPanel sahibim. Öğeler arasında dolaşmaya ve Adlarını almaya çalışıyorum, ancak her bir öğeye türüne erişmek için türüne gitmem gerekiyor gibi görünüyor. Name özelliği.WPF'de StackPanel çocuklarına döngü

Peki ya StackPanel'de çok fazla farklı tipler varsa ve ben sadece elementlerin ismini almak istiyorum?

Bunu yapmanın daha iyi bir yolu var mı? İşte

denedim budur:

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

cevap

15

Doğru temel sınıf yayın yapmak için yeterli olacaktır. FrameworkElement'dan gelen her şeyin bir Name özelliği vardır. Bu sürece Masası'nda sadece FrameworkElement türetilen kontroller vardır gibi çalışır

foreach (FrameworkElement element in panel.Children) 
{ 
    var name = element.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

Bu, 2013'ten bir cevap değil, hayır. Her yere uyarlamayacağım. Ve ben her zaman daha iyi olduğundan emin değilim, burada '((FrameworkElement) çocuk) .Name' en optimize formu olabilir. –

+0

Evet, cevabı düzenlediğinizden beri anladım. Tarihi gördüm. – Default

7

sadece foreach döngüsü değişken için uygun türü kullanabilir. Entities kullanarak

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

: diğerleri de varsa (UIElement türetilmiş gibi sadece) Bunu yazabilirsiniz

Nasıl `childName = (FrameworkElement olarak çocuğun) ?. Name hakkında
foreach(var child in tab.Children.OfType<Control>) 
{ 
    UnregisterName(child.Name); 
}