14 Haziran 2014 Cumartesi

WPF Sınıf Hiyerarşisi

Bu yazımda WPF sınıf yapısı inceleyeceğiz.

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.

 


 

 

8 Haziran 2014 Pazar

WPF Mimarisi

WPF Mimarisi , bu teknolojiyi kullanan her developerın bilmesi gereken bir mimaridir.

Genel hatlarıyla 3 katmandan oluşmaktadır;
 

1-Managed WPF Layer

WindowsBase , PresentationFramework ve PresentationCore bileşenlerini barındıran katman.

2-MediaIntegration Layer (UnmanagedCode)

milcore(Media Integration Library Core) ve WindowsCodecs bileşenlerini barındıran ve yönetilemeyen yapıya sahip katman.

3-Core OS

İşletim sisteminin çekirdeğini oluşturan katman.




Şimdide bu katmanlardaki bileşenleri inceleyelim;


Presentation Framework – Kullanıcı arayüzünde kullandığımız pencereler, kontroller, butonlar, metin kutuları gibi nesneleri içeren en üst katmandır ve bu nesneler PresentationFramework.dll kütüphanesi içinde bulunmaktadır.

Presentation Core – Visual sınıfından türemiş UI elementlerinin bulunduğu kısımdır.WPF in bize sunduğu imkanların dışında kullandığımız,türettiğimiz, oluşturduğumuz nesneleri bu katmanda işliyoruz.Bu nesneler PresentationCore.dll kütüphanesi içerisinde bulunmaktadır.

MilCore –Yönetilemeyen kod kısmıdır. En temel ve önemli işlevi WPF katmanı ile DirectX arasında köprü görevi görmesidir. WPF kontrollerinin  görüntülenmesini sağlar. WPF nesnelerinin donanım seviyesinde işlemle (rendering) görüntülenmesini sağlar. milcore bileşeni milcore.dll kütüphanesi içinde yer alır.Windows7 ve Windows Vista Masaüstü görüntülenmesinde bu kütüphaneyi kullanır.


WindowsCodecs–Resim ve videoların işlenmesi,gösterilmesi vb. işlemleri destekleyen  bileşendir ve WindowsCodecs.dll kütüphanesinde yer alır.


Direct3D – Bu katman WPF Uygulamaları kullanılarak oluşturulan grafiklerin görüntülenmesinde kullanılır.



1 Haziran 2014 Pazar

WPF Nedir?

WPF (Window Presentation Foundation) zengin içerikleriyle yeni nesil kullanıcı arayüzlerleri geliştirmeyi ve göstermeyi sağlayan bir platformdur.

Zengin içeriği ve kendi mimarisi ile daha modern, kullanıcı dostu ve daha performanslı uygulamalar geliştirmemize olanak sağlamaktadır.

WPF ile birlikte XML yapısına benzeyen XAML(Extensible Application Markup Language) dilini kullanarak esnek kullanıcı arayüzleri tasarlayabiliriz.

XAML, UI ve code behind dediğimiz kod ile kullanıcı arayüzü geliştirme sisteminide birbirinden ayırmaktadır. Yani herhangi bir kod yazmadan UI da bütün arayüzümüzü oluşturabiliriz.Tabi kod ile UI geliştirme desteği XAML ile de devam etmektedir.

XAML dilinin bir başka güzelliği ise hem tasarımcı hem geliştiricinin aynı UI üzerinde birlikte çalışabilimesine olanak tanımasıdır.

WPF'de bulunan zengin kontrol içerikleriği ve bütün kontrollerin templates ve styles ile istediğimiz gibi değiştirebilmemiz imkanı başlıca ilgi çeken özellikleridir.

WPF vector tabanlı grafik sistemleri de desteklemektedir.Yani kolaylıkla kendi istediğimiz UI Elementleri oluşturabiliriz.

Ayrıca WPF 2D ve 3D grafikleri,belge akışları ve multimedya içerikleri de destekler.WPF kullanarak bağımsız uygulamalar ve XBAP(XML Browser Applications) geliştirebiliriz.

Aşağıdaki diagramda özetle WPF'in özelliklerini görebilirsiniz.