System.Windows.Controls.Grid does not contain a public definition for GetEnumerator hatası

WPF foreachle grid içerisindeki kontrollere ulaşmak isterken  foreach statement can not operate on variables of type ‘System.Windows.Controls.Grid’ because ‘System.Windows.Controls.Grid’ does not contain a public definition for ‘GetEnumerator’ hatasıyla karşılaştım. Yazdığım kod aşağıdaki gibiydi.

foreach (StackPanel stackpanel in grid_stackpanels)
{
foreach (Rectangle rect in stack.Children)
{
………………………

}
}

Normal bir masaüstü projesinde kontrollere erişmek için  foreach (……….in Controls) diyince sıkıntısız çalışıyordu. Bende grid içerisinde de böyle arayacağımızı düşünmüştüm ancak böyle değilmiş. Gridin children’ları arasında gezinmek gerekiyormuş. Yani kod aşağıdaki şekilde olmalı.

foreach (StackPanel stackpanel in grid_stackpanels.Children)
{
foreach (Rectangle rect in stack.Children)
{
………………………

}
}

Burda dikkat edilmesi gereken bir nokta daha var. İlk döngü gridin içerisindeki tüm kontrollerin hepsinin StackPanel, ikincisinde ise StackPanellerin içerisinde sadece Rectangle’lar olması gerekiyor. Böyle olmaması durumunda yani aranan kontrollerin dışında farklı bir kontrol varsa kodumuz aşağıdakine benzer bir hata verecektir.

Unable to cast object of type ‘System.Windows.Shapes.Rectangle’ to type ‘System.Windows.Controls.StackPanel’.

Bu hatayı önlemek için foreach döngüsünü kullandığımız yerde aradığımız kontrol dışında farklı bir kontrol olmadığına emin olmalıyız. Çünkü o kontrolleri aradığımız kontrole cast etmeye çalışacak bu da hataya sebep olacaktır.

Yorum yaz

0 Yorumlar.

Yorum Yap


Not - Bunları KullanabilirsinizHTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>