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

20070704

WPF’e Giriş

Windows Presentation Framework, Microsoft'un .NET 3.0 yeniliklerinin bence en önemlisi. Bugüne kadar alıştığımız ve kullandığımız kullanıcı arayüzlerinin ötesinde, görsel olarak çok farklı kullanım deneyimi sunan WPF, programlama modeli olarak ta Microsoft'un Tasarımcı ile Programcı yı birlikte çalıştırma vizyonunu da gerçekleştiriyor.

Sizlerin de takip ettiğiniz üzere, Microsoft, Windows XP (Experience) ile birlikte, bilgi işlemeyi (computing) kullanıcı deneyimi etrafında şekillendirme vizyonunu hayata geçirmeye başlamıştı. Bizler, bugüne kadar, bilgisayarın (daha doğrusu yazılım platformlarının) bizlere sunduğu şekilde bilgi işlemeye alışmıştık. Ancak, gri zeminli formlar'la başlayan bu deneyim, özellikle zengin web uygulamalarının yaygınlaşmasıyla birlikte geçerliliğini kaybetmekteydi. İşte tam bu noktada, Microsoft, WPF platformunu duyurdu .NET 3.0 ile gelen yeniliklerle birlikte.




Windows Presentation Framework (WPF), 3 temel amaca çözüm olarak geliştirilmiştir: yeni nesil zengin kullanıcı arayüzlerini oluşturmak, tasarımcı ve geliştiriciyi birlikte çalıştırabilmek ve Windows ile Web istemci platformlarını ortak yapmak (Silverlight WPF/E olarak lanse edilmişti).

Bu doğrultuda, zengin çoklu ortam destekli, vektörel ve 3D grafik destekli ve tamamen yoğun kullanıcı etkileşimi destekleyen güzel bir programlama modeli mevcut WPF'te. Bunun temelinde de XAML olarak adlandırılan eXtensible Application Markup Language (Genişletilebilir Uygulama Betimleme Dili) bulunmaktadır. XAML, kullanıcı arayüzlerinin tanımlanmasında kullanılan Button, TextBox, Label gibi XML elemanlarını içeren bir betimleme dili. Buradaki esas güç, XAML ile tanımlanan her eleman aslında WPF teki bir sınıfa karşılık geliyor. Yani:

<Button Background="Red">

No

</Button>

Yazmak ile,

Button btn = new Button();

btn.Background = Brushes.Red;

btn.Content = "No";

yazmak arasında bir fark yok. Yani kod ile yaptığımız herşeyi, XAML ile ifade etmek mümkün. Bunun tam tersi de geçerli tabii.





Yukarıda da bahsettiğim gibi, temel amaçlardan birisi de aynı platform üzerinde web ve Windows istemcileri oluşturabilmek. Bu da XAML ve WPF programlama modeli sayesinde gerçekleştirilebilen bir vizyon.

Sonuç olarak WPF ile birlikte, artık kullanıcı deneyimleri yeni bir aşamaya geçerken, geliştirici ve tasarımcılar için de farklı fırsatlar sunuluyor. Bir sonraki makalede görüşmek dileğiyle.

20070703

WEB 2.5

Hehe, ben de bi cinslik yapayım istedim :)

Web 2.0 malumunuz, multimedya yönelimli, Ajax gibi güzellikleri bünyesinde barındıran, CSS/XHTML ile standartlara uyumlu ama bi o kadar güzel görünümlü, ve sosyalleşmeyi şiar edinmiş bir web uygulaması geliştirme pratiğinin O'Reily tarafından konulmuş adı. Tabi Business 2.0 magazinin ve bilimum diğer zevatın yayınladığı haberleri incelediğimizde, Web 2.0, önceki sürümünün (o da neyse) aksine, çok ciddi bir iş potansiyeli sunduğunu görüyoruz. Tabi 2.0 öncüleri bunu çok amaçlamasa da, artık iş hayatına yönelik Web 2.0 uygulamaları da mevcut (örneğin Project Management, BI ve CRM uygulamaları veya en azından kurumsal mesajlaşma uygulamaları) işte bunlara ben Web 2.5 diyorum....

2,5 Kayıp Ay...

Selamlar,

Farkettiğiniz (ve bazılarının mail attığı üzere) yaklaşık 2,5 aydır bloglamıyordum. Bu süre zarfında yaptıklarımı yazayım evvela:

1) Ruby (on Rails) kullanarak biraz kodlama yaptım
2) WPF ve Expression (Blend) kullanmaya başladım
3) Silverlight kurcaladım
4) UCF projemi ve diğer tüm projelerimi erteledim
5) Yeni makaleler yazmaya niyetlendim ama yapmadım
6) Bazı etkinliklere katıldım...

Bütün bunların nedenini soracak olursanız, Doktora Yeterlilik sınavını geçmekle meşguldüm. Evet, artık yeterliyim, ve bununla gurur duyuyorum :D