Makale Özeti

Programlama pradigmalarından olan event driven programming'de kullanıcılar butona tıkladığında, ya da resmin üzerine mousela geldiğinde uygulamalar değişik işlevler göstermektedir. Bunlar hepimizin bildiği gibi biz yazılımcılar tarafından eventlerin içinde yazdığımız kodlar tarafından gerçekleşen işlerdir.

Makale

Makale:

Programlama pradigmalarından olan event driven programming'de kullanıcılar butona tıkladığında, ya da resmin üzerine mousela geldiğinde uygulamalar değişik işlevler göstermektedir. Bunlar hepimizin bildiği gibi biz yazılımcılar tarafından eventlerin içinde yazdığımız kodlar tarafından gerçekleşen işlerdir. Wpf'te, web ve win32 uygulamalarında bulunan event firing ve event handling mekanizmasının yanı sıra event routing mekanizması geliştirilmiştir.

Wpf Routing Nedir?

Routed event, sadece olayın gerçekleştiği element tarafından değil, olayın meydana geldiği nesnenin içinde bulunduğu nesne ağacı tarafından da implement edilmesini sağlayan mekanizmadır. Bildiğiniz gibi wpfte çoğu kontrol content kontroldür. Yani bir kontrol içinde başka kontroller de bulunabilmektedir. Bir buton içine stackpanel, stackpanelin içine textblock, label, bir buton daha ekleyebiliriz. Bu şekilde iç içe kontrol eklemeyi istediğimiz kadar yapabiliriz.

Yazdığımız xaml'a baktığımızda StackPanel -> Border -> Label -> StackPanel -> TextBlock, Image, TextBlock, TextBox şeklinde bir yapımız olduğunu görürüz. Bu kontrollerin hepsinin UIElement'ten türediğini tanımlarına gidersek görebiliriz. UIElementten gelen MouseDown eventini bu kontrolün herhangi bir yerini mousela tıkladığımızda yakalamak için iç içe sarmalanmış olan bütün kontrollerin Mousedown eventlerini dinlememiz mi gerekir? İşte bu durumda Wpf devreye giriyor. Routed event çeşitlerinden olan bubbling event mekanizması sayesinde en dıştaki kontrolün MouseDown eventini dinlememiz, kullanıcının mousela kontrol üzerinde herhangi bir yeri tıkladığında yakalayabilmemiz için yeterli koşulu sağlar.

Routed Event Çeşitleri

1-) Direct Events: Bunlar alışılmış .Net eventleri gibidir. Bir elementte meydana gelirler ve diğer elementlere geçmezler. Örnek: MouseEnter

2-) Bubbling Events: Bu eventler ağaç hiyerarşisinde meydana geldiği elementten üst elementlere doğru gezer. Ta ki en üst elemente ulaşana kadar. 
MouseUp ve MouseDown eventleri bu tip eventlere örnek teşkil etmektedir. Xaml'a baktığımızda bu tipten routing evente örnek verdiğimizi görürüz

3-) Tunneling Events: Bu eventler Bubbling Eventlerin çalıştığı yönün tam tersi yönüne çalışır. Yani element ağacı hiyerarşisinde yukarıdan aşağıya doğru gezinir. PreviewKeyDown bu tür bir evente örnektir. Xaml'a baktığımızda bu tipten routing evente de örnek verdiğimizi görürüz.

  Direct Event Bubbling Event   Tunneling Event  

Şimdi de anlatılanların pekişmesi için yazmış olduğumuz cs tarafına bakalım.

Cs

Form üzerinde bulunan ve iç içe eklenmiş olan Border, StackPanel, Label ve Image, TextBox nesnelerinin MouseDown ve PreviewKeyDown eventlerini dinleyerek, eventlerin meydana geliş sırasını göstermeye çalıştık. MouseDown eventinin meydana geliş sırasını incelemek için mouse ile formdaki resme tıkladığımızda bubbling routed eventten dolayı sırası ile Image, StackPanel, Label ve Border nesneleri MouseDown eventini yakalar. Daha sonra PreviewKeyDown eventinin meydana geliş sırasını incelemek için resmin altında bulunan textbox'a klavyeden bir karakter girdiğimizde tunneling routed eventten dolayı sırası ile Border, Label, StackPanel ve TextBox nesneleri PreviewKeyDown eventini yakalar.

Örnek Ekran Görüntüleri

   

Bu makalemizde Wpf'te event mekanizması olan Routed Eventlerin ne olduğunu, işleyiş mantığını, çeşitlerini örnekler vererek anlatmaya çalıştık. Bir sonraki makalemizde görüşmek üzere... 

Makale için kullanılan linkler:

Direct Event

Bubbling Event

Tunneling Event

Sezgin Zeka 
sezginzeka@gmail.com