Etiket arşivi: wpf

Silverlight – WPF Kendi oluşturduğumuz Brush’a kodla ulaşmak

Expression Blend’de oluşturduğumuz brushların yanındaki kutucuğa tıklayarak Convert to New Source dersek oluşturduğumuz Brushları bir anlamda template haline getiririz ve başka yerlerde kullanma imkanımız olur.Ben de bu şekilde kullanmak istedim ama bir sıkıntıyla karşılaştım. Oluşturduğum brush’a isim verdiğim halde bir türlü ulaşamıyordum. Nette yaptığım araştırmalar sonucunda aşağıdaki gibi bir çözümle problem halloldu.

rectange.Fill = (Brush)FindResource(“olusturdugum_brush_ismi”);

Böylece oluşturduğum brush’ı istediğim yerde kullanabiliyorum.

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.