WPF de kullanıcı arayüzleri geliştirirken kullanacağımız nesnelerin sınıf hiyerarşisini incelediğimiz zaman bu yapının Managed WPF Layer de bulunan PresentationFramework içinde olduğunu görürüz. WPF mimarisini burada inceleyebilirsiniz. WPF sınıf hiyerarşisini, kontrol nesnelerini , ana sınıfları ve core yapısını daha iyi anlayabilmek için aşağıdaki diyagramı da inceleyebilirsiniz.
Dispatcher Object
WPF de tüm nesneler abstract bir sınıf olan DispatcherObject nesnesinden türerler. DispatcherObject nesnesi de System.Threading namespace i altındadır.WPF , UI ların tek bir iş parçacığı(single thread) ile çalıştığı bir modele sahiptir.Dolayısıyla Bir UI elementinden diğer bir UI elementine, iş parçacığına erişemeyiz.Bu tarz durumlar hataya neden olmaktadır.Bu gibi durumların üzerinden gelmek için WPF dispatcher içermektedir ve bütün UI elementleri DispatcherObject sınıfından türemektedir.Bu sınıfta CheckAccess ve VerifyAccess isminde 2 tane method vardır.CheckAccess methodu eğer thread nesneye erişebilirse true döner ve VerifyAccess de eğer nesneye erişemez ise hata fırlatır. Böylece UI iş parçacıklarının kullandığı bu basit methodlar ile WPF nesnelerinin erişilebilirliğini kontrol edebiliriz.
Dependency Object
DependencyObject sınıfı System.Windows namespace i altında bulunmaktadır. Attached Property ve Dependency Property yapısını destekleyen base classtır. Dependency Properties dediğimiz aslında data bindingdir. Yani UI daki nesneleri kolay bir şekilde yönetebilmek ve arka planda mümkünse hiç kod yazmamaktır. WPF olaylar(events) ve methodlar yerine propertyleri daha ön planda tutmaktadır. Çünkü propertylerin algılanması daha kolaydır. Asıl amaç kullanıcı arayüzü(UI) ile diğer nesneler arasında daha esnek,kolay ve anlaşılır bir şekilde ilişki kurulmasını sağlamaktır. DependencyObject bu konuda birçok yeni teknik ve özellikler içermektedir. Dependency Object lerin de GetValue ve SetValue olmak üzere 2 methodu vardır.GetValue ile Dependency Property den nesnenin değeri alınır.SetValue ile değer Dependency Propertysine atanır,set edilir. Daha ayrıntılı bilgileri ilerleyen yazılarımda paylaşacağım.
Visual
WPF de her UI elementi bir görsel sunum, görüntü içermektedir. WPF Window yapısı Visual sınıfından türemektedir. Visual sınıfı kesme, şeffaflık gibi bazı temel çizim(Drawing) methodları içermektedir. Ayrıca bazı temel ekleme, çıkarma görsellerine de sahiptir. Visual sınıfı managed kütüphanesi ve milcore.dll arasındaki bağlantıyı da sağlar.Milcore.dll hakkında daha fazla bilgi için buraya tıklayınız.
UI Element
UI Element i Layout,focus, Input,Event gibi yapıları destekler. Bunlar core yapılardır ve WPF in önemli özelliklerindendir. UI Elementinde temel seviye olan layout , UI tasarımındaki temel düzenlemeleri içerir.Bunları Measure ve Arrange olarak geçebiliriz. Measure layout umuzun boyutunu nereye kadar olacağına karar verirken Arrange layoutdaki child dediğimiz alt nesnelerin maksimum boyutuna karar verir.
Framework Element
Framework element UI elementinin layout özelliklerini içerir ve data binding,animation ve styles gibi özellikleri de destekler. Key properties dediğimiz VerticalAlignment(dikey hizalama), HorizontalAlignment(Yatay hizalama), Margin(Kenar) gibi özellikleri de desteklemektedir.
Control
Control WPF de bulunan nerdeyse buton, combobox, label, textbox gibi bütün kontrollerin türediği temel sınıftır. bu seviyede bazı kontrollerin seviye özellikleri vardır. Örneğin backgorund, foreground ve fontlar FontSize,FontStyle gibi propertylerle ilişkilidir.
