Sıradan property’lerin yanı sıra XAML,pek çok kontrolün uygulayabildiği fakat farklı bir sınıfta tanımlanan attached property adında bir konsepti de içerisinde barındırmaktadır. WPF uygulamalarında attached property’ler daha çok kontrollerin düzeni(layout)  için kullanılmaktadır.

Nasıl Çalışır?

Her kontrolün kendine has belirli property kümesi vardır.Örneğin bir textbox’ın fontu,metin rengi ve text içeriği gibi özellikleri vardır.Bu özellikler FontFamily,Foreground ve Text gibi propertyler tarafından set edilebilmektedir.Bunun yanı sıra bir kontrolü bir konteynırın içine yerleştirdiğimizde, kontrol konteynırın tipine bağlı olarak ek özellikler kazanır.Örneğin bir textbox’ı bir Canvas’ın içerisini yerleştirdiğimizde sol üst noktaya göre pozisyonunu ayarlayabiliyor olmalıyız.Bu ekstra detaylar attached property ‘ler kullanılarak ayarlanabilmektedir.

Attached property’ler isimlendirilmesi daima  DefiningType.PropertyName şeklinde iki kısımdan oluşur.Bu ikili isimlendirme sözdizimi XAML Parser’ın  normal property’ler ile attached property’leri ayırt etmesini sağlar.

<Canvas> 

<TextBox Canvas.Top="10"/> 

<TextBox Canvas.Top="40"/> 

<TextBox Canvas.Top="70"/>

</Canvas> 

Attached property’ler aslında gerçek property değildirler.Onlar özünde method çağrımlarına çevrilmişlerdir.XAML parser DefiningType.SetPropertyName() formundaki static bir metodu çağırır.Örneğin yukarıdaki kodumuzda DefiningType Canvas,Property’miz  de Top olduğu için xaml parser Canvas.SetTop() metodunu çağırır.

SetPropertyName()’i çağırırken xaml parser iki parametre geçirir:düzenlenen nesne ve belirlenen property değeridir.Örneğin textbox kontrolünde Canvas.Left özelliğini set ettiğimizde parser şu kodu çalıştırır:

Canvas.SetLeft(txtBox1,10);

Burada soldan uzaklık aslında uygulanan nesne üzerinde saklanmaktadır.Bu durumda property değer TextBox üzerinde saklanmaktadır.Çünkü tüm WPF kontrolleri gibi TextBox kontrolü de DependencyObject temel sınıfından türemiştir.Bilindiği gibi DependencyObject, dependency property’lerin sınırsız bir koleksiyonunu saklamak için tasarlanmıştır.Attached property’ler de dependency property’lerin özel bir tipidir.Belirtmem gereken bir husus da şudur.Aslında Canvas.SetLeft() metodu DependencyObject.SetValue() metodunun bir kısayoludur.Örneğin:

txtBox1.SetValue(Canvas.LeftProperty,10);

Attached property’ler WPF’in çekirdek bileşenleridir.Çok amaçlı genişletilebilir bir sistem gibi davranırlar.Örneğin Left property’sini attached property olarak tanımlayarak,bu property’nin herhangi bir kontrol ile kullanılabilmesini sağlamakla beraber esnek bir yapı oluşturmuş oluruz.

Kolay gelsin.  

About the Author