Yazılım Mimarisi ve Yazılım Mühendisliği hakkında herşey...

20070710

XAML ile WPF Programlama

XAML (eXtensible Application Markup Language), .NET nesne hiyerarşisini kullanmak için geliştirilmiş basit ve bildirimsel bir programlama dilidir. XML tabanlı bu tanımlama dilini, HTML ve benzeri tanımsal dillerle karşılaştırmak yanlış olur. Bunun nedeni, .NET 3.0 içerisinde XAML derleyicisi ve çalışma zamanı XAML çözümleyicisi bulunmasıdır. Ayrıca, XAML Windows Workflow Foundation için de kullanılabilecek şekilde tanımlanmıştır. Bu sayede WWF iş akışları da XAML ile tanımlanabilir.

WPF ile XAML kullanımı genelde yanlış anlaşılabilmektedir. WPF, .NET 3.0 destekli herhangi bir programlama dili ile kullanılabilir. Benzer şekilde, XAML yukarıda söylendiği gibi WWF tanımlamalırında da kullanılabilmektedir. Yani WPF ile XAML tamamen bağımsızlardır. Ancak, bariz faydalarından dolayı WPF geliştirmelerini XAML ile yapmak .NET 3.0 geliştirme pratiklerinin başında gelmektedir. İsterseniz bu durumu aşağıdaki örneklerde inceleyelim.

XAML:

<Button xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" Content="OK" />

C#:

System.Windows.Controls.Button b = new System.Windows.Controls.Button( );

b.Content = "OK";

Yukarıdaki kod parçacıkları aynı elemanı tariflemektedir. XAML ile bir XML elemanı tanımlamak, C# gibi bir dille ilgili elemanı yaratmakla eşdeğerdir. Yine benzer şekilde, XAML ile bir niteliğe değer atamak, nesnelerin özelliklerini ayarlamakla eşdeğerdir. Olay tanımlamaları da bu mantıkla aşağıdaki gibi gösterilebilir:

XAML:

<Button xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" Content="OK"

Click="button1_Click"/>

C#:

System.Windows.Controls.Button b = new System.Windows.Controls.Button( );

b.Click += new System.Windows.RoutedEventHandler(button1_Click);

b.Content = "OK";

Öte yandan, XAML elemanlarının özellikleri aşağıdaki şekilde de tanımlanabilir:

<Button xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" Content="OK"

Click="button1_Click">

    <Button.Content>OK</Button.Content>

    <Button.Background>Blue</Button.Background></Button>


 

Yukarıdaki XAML kod parçacığına bakınca şunu farketmiş olabilirsiniz: Button elemanının Background özelliğini string biçiminde Blue olarak ayarlıyoruz, ancak .NET kod modelinde bunun Brush nesnesi olması gerekiyor. Bu durumda XAML bu dönüşümü nasıl yapıyor?

XAML modelinin çalışması için arkaplandaki XAML derleyicisi, bazı dönüşümleri otomatik olarak yapıyor. Button.Background özelliğinde Blue string değeri kullanıldığında XAML bunun TypeConverter nesnesinin aslında bir BrushConverter olduğunu biliyor. WPF içerisinde bu dönüştürücüler TypeConverter hiyerarşisinde bulunmaktadır. Ayrıca, kendiniz de bir Type Converter yazabilirsiniz.

Son olarak, XAML içerisindeki bir diğer kavram da Markup Extensions kavramıdır. XAML elemanlarının niteliklerinde { } parantezleri arasında yazılan ifadeleri XAML derleyicisi Markup Extensions olarak algılar. Bir Markup Extensions sınıfı, { parantezinden sonraki ilk ifadedir ve sonrasında gelen ifadeler ilgili sınıfın özellikleridir. Markup Extensions sınıfları, varsayılan constructor lara sahip oldukları için XAML elemanı olarak ta ifade edilebilirler.

<Button xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation

Content="{Binding Path=Height, RelativeSource={RelativeSource Self}"

Click="button1_Click">

    <Button.Background>Blue</Button.Background></Button>


 


 

<Button xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

Click="button1_Click">

    <Button.Background>Blue</Button.Background>

<Button.Content>

    <Binding Path="Height">

<Binding.RelativeSource>

<RelativeSource Mode="Self"/>

</Binding.RelativeSource>

</Binding>

</Button.Content>

</Button>


 

Sonuç olarak, XAML, bize bildirimsel olarak XML modeli ile WPF arayüzleri oluşturmamızı sağlayan çok güçlü bir dildir. Özellikle Expression Blend aracı ile birlikte çok kolay şekilde XAML arayüzleri oluşturulabilmektedir. Bu giriş makalesinde değinemediğimiz bir diğer konu da XAML'ın grafiksel ifade yeteneğiydi. Ancak, XAML, programatik erişimin bir modeli olduğu için, grafiksel modelleme konusunda da oldukça başarılı bir dildir. Hiyerarşik yapısı sayesinde, WPF demolarında gördüğünüz tüm uygulamalar XAML ile tanımlanabilmektedir. Bu konuda, MSDN ve ilgili sitelerdeki çalışmaları ve örnek kodları inceleyebilirsiniz. Bir başka makalede görüşmek üzere,

Ekrem Aksoy

ekrem.aksoy@msakademik.net

eaxitect.blogspot.com

1 Comments:

Blogger Anıl Çalışkan said...

Küçük bir uyarı: Makalelerinizin kod bölümleri hem explorer hem firefox'ta kendi alanının dışına taşıyor... İyi çalışmalar... :-)

9:02 PM

 

Post a Comment

Subscribe to Post Comments [Atom]

<< Home