Makale Özeti

Bu makalemizde WPF3.5 ile gelen yenilikleri incelemeye çalışıyoruz.

Makale

Visual Studio 2008 ‘i yakından takip edenler hatırlar ki 3 hafta(20 Kasım 2007) önce tam sürümü biz geliştiricilere sunulmuştu. Bu tam sürümün piyasaya sunulması ile birlikte birçok sorun düzeltilmişken Windows Vista kullanıcılarında bazı sorunlar ile karşılaştır. Fakat bu sorunlarda çözülemeyecek kadar vahim değildi. Bazıları .NET kütüphanelerine ulaşamıyorlardı, bazıları ise hiçbir kod yazmadan boş projeyi derleyemiyorlardı. Bu tür sorunların çözümleri tahmin edeceğiniz üzere oldukça kolaydı. Nerelerde çalışacaklarını belirtmemiz yeterliydi.

Bu gelişimlerin ötesinde birde çok güzel bir olay yaşandı. .NET3.0 ömrünü doldurmuş yerini .NET3.5 almıştır. Bu gelişimler olurken bizlerinde .NET3.0 bünyesinde yer alan yeni nesil dillerin ne tür değişiklikler yaşadığını merak etmeye başlamıştık. Bu meraklar ilk olarak eski özellikler kaybolup kaybolmadığı ile ilgiliydi. Fakat bunun yersiz bir merak olduğunu ve kaybolması yerine birçok ek özellikle geldiğini öğrenmiş olarak içimizi rahatlatıyorduk. Peki, .NET3.5 ‘te neler yeniydi. İlk olarak bu sorunun cevabını bulmamız gerekiyordu.

.Net3.0 ile aramıza katılmış olan WPF, WCF, WF ve CardSpace .NET3.5 bünyesinde yerlerini almışlardı. Peki daha yeni ne vardı. Hatırlayacağınız kadarıyla Visual Studio 2005 ’e .NET3.0 ile birlikte Linq to SQL, Ajax gibi eklentilerde kuruyorduk. Bu teknolojilerin hayatımızı oldukça kolaylaştırdığı söyleyebilirdik. Doğal olarak beklentimiz yeni çekirdekte bulunmasıydı. Çünkü bu yapılar .NET3.0 bünyesine dahil edilmemişlerdi. Microsoft’ta çalışan .NET geliştiricileri de bu durumu gözlerinden kaçırmayarak bu iki nadide yapının yanında Rest adı verilen bir yapıyı da .NET3.5 çekirdeğine de ekleyerek beklentileri karşılamış oluyordu.

Peki, bu kadar eklemeler olurken eskiden bünyede yer alan dillere ve eski sürüm Framework ’lere destek ne düzeydeydi. .NET2.0 tek bir eksiklik dışında tamamıyla .NET3.5’ eklenmiş. Fakat tek bir eksikten bahsetmiştik. VS ’in daha önceki sürümlerinde Java geliştiricilerini düşünerek tamamıyla pazarlama taktiği olarak kullanılan J# dili VS 2008 ’de maalesef yerini alamamış. Diğer diller ise (VB.net, C++.net ve C#.net) varlıklarını sürdürmektedirler. Tabii unutulmaması gereken bir nokta ASP.NET ’te 3.5 sürümü ile aramızda kalmaya devam etmektedir.

.NET3.5 yapısında yer alan dilleri ve kütüphaneleri gösteren bir resim ile yukarıda açıkladıklarımızı daha da akılda kalıcı kılabiliriz.



.NET3.5 çekirdeğinde hangi dillerin ve yapıların yer aldığına göz attıktan sonra, bu yazımızda değinmeyi amaçladığımız .NET3.5 WPF ’e ne tür yenilikler getirdi olacaktır.

Windows Presentation Foundation(WPF) aramıza 2005 yılının son çeyreğinde Avalon kod adı ile merhaba demişti. Kendisi ile birlikte gelen yenilikler ile adından çokça söz ettireceğe benziyordu. Öylede oldu. Peki, ilk çıktığı zamanlarda ne gibi yenilikler getiriyordu. İlk olarak geliştirme aşamasında bizlere XML ’den türemiş olan XAML(Zammel) ile merhaba diyordu. XAML yardımı ile artık standartlaştı dediğimizi Windows Formlar büyüleyici bir görünüme kavuşmuş oldular. Resim, animasyon gibi verilerimizi alternatif programlar(Expression Studio ailesi) yardımı ile XAML kodlarını alarak uygulamamıza ekleyebiliyorduk. Bunun bizlere kazancı tasarımcı – geliştirici uyumunu en üst düzeye çıkarmakla birlikte tamamen sayısal kodlar yardımı ile verilerimizi uygulamamıza eklediğimiz için hem uygulamanın boyutu hem de performansı en uygun denilebilecek seviyeye yaklaşmış oluyordu.

2006 yılının ortalarında ise .NET3.0 ile birlikte Avalon kod adı Windows Presentation Foundation ile gerçek ismine kavuşuyordu. Bu sefer getirdiği yenilikler, masaüstü uygulamalarında Browser tarzı uygulamalar sunarak web ile tam uyum içinde çalışan yazılımlar geliştirmemize olanak tanıyordu. Bunları yaparken de XAML ile birlikte C# ‘ın uyumlu çalışması geliştiricileri kendisine çekmeye başlıyordu.

2007 yılının son çeyreğinden ise Visual Studio 2008 ile .NET Framework 3.5 ‘in içerisinde yer alarak kendisini yenilemiş olarak aramıza daha da kuvvetli bir biçimde yer almış oluyordu. Kod yazımı biraz daha kolaylaştırılması gibi özellikleri, web servisleri ile karşılaşılan sorunların çözümü gibi yenilikler ile kendini daha kuvvetlendirmiş olarak geliştiricilere kendisini sunuyor.

Şimdi ayrıntılı bir biçimde WPF ’in .NET Framework 3.5 ile ne tür yeniliklere sahip olduğuna değineceğiz.

3.0 sürümü ile Uyumu

.NET3.0 ile hazırlanmış olan uygulamalar .NET3.5 ile çalıştırılmak istendiğinde yeni sürüme güncelleme yapılarak sorunsuz bir biçimde çalıştırılması sağlanmıştır.

.NET3.5 sürümü ile geliştirilmiş uygulamalar .NET3.0 ile geliştirilmek istendiğinde XAML ’de yeni nesil XML kütüphanesi yok ise sorunsuz bir biçimde çalışmaktadır.Bu yeni nesil XML kütüphanesi: http://schemas.microsoft.com/netfx/2007/xaml/presentation dır. Bu kütüphaneyi .NET3.0 sürümü ile çalıştırmak istiyorsak 2006 sürümünü seçmemiz gerekmektedir. Bu sürümü nasıl seçeceğimizin ekran görüntüsüne alttaki resimden ulaşabilirsiniz.



.NET3.0 sürümünden .NET3.5 sürümüne geçişte bir güncellemenin olduğunu belirtmiştik. Bu geliştirme esnasında uygulanan mimariyi aşağıda bilgilendirme için vereceğiz. Vermiş olduğumuz bu mimari .NET1.1 sürümünden bu yana kullanıldığından ötürü bu sürümün mimarisini verirsek mantıken herhangi bir sorun ile karşılaşmayız.



Yukarıda görmüş olduğunuz mimari farklı .NET sürümlerinde geliştirilmiş olan uygulamalarda güncelleme sırasında uygulanan mantıktır.

Uygulamalar Açısından Yenilikler

Uygulama modellerinde geliştirilmiş olan özellikler:

• XBAP ile geliştirilmiş geniş çaplı uygulamalarda görüntüsel olmayan(dll) öğeler eklenmek istendiğinde uygulama hata verip Visual Studio kendisini kapatıyordu. Bu sorun çözülmüş. Bu arada XAML ile geliştirilmiş Browser uygulamalarına XBAP denilmektedir.

XBAP uygulamaları Firefox ile sorunsuz bir biçimde çalışabilecek düzeye getirilmiş. Fakat Opera ve Safari internet tarayıcılarında hala sorunlar ortaya çıkmaktadır.

• XBAP uygulamaları internet tarayıcısında çalışırken artık arka planda cookie ‘lerin oluşmasına olanak tanınıyor. Yani uygulama diğer web siteleri gibi dosyalarını tarayıcının yedeklemesine izin veriyor. Bu gelen yenilik uygulamaların tarayıcılarda ilk defa açılmasından sonraki açılmalarından açılma süresi olarak gözle görülür bir hızlanma olmasına sebep olacaktır.

• XAML de kullanılmakta olan IntelliSense çok daha iyileştirilmiş(Visual Studio 2005 ’te .NET3.0 SP1 gelene kadar maalesef çok kötü çalışıyordu).

• Localization özelliğinde kullanılmakta üzere ekstra dil aileleri eklenmiş.

Visual ve NonVisual Yapıların WPF ’e Eklenmesi

.NET3.0 sürümünde uygulamalara fonksiyonellik katabilecek eklentiler yapabilmemize olanak tanınıyordu. Amaçlanan fonksiyonelliği .NET Framework ’ün izin verdiği ölçüde sağlayabilmekteydik. Örneğin bu fonksiyonelliği dinamik link kütüphanesi(dll) ile sağlayabiliyorduk. Fakat eğlence ile ilgili bir eklenti eklemek istediğimizde yalnızca Microsoft tarafından geliştirilmiş olan eğlence dosyalarını uygulamamıza ekleyebiliyorduk.

Tabii bu tür yukarıda bahsettiğimiz eklentiler dışında eklentiler yapabilmemiz için 3. Parti yazılımları kullanmamız gerekmekteydi. .NET3.5 ile birlikte Office dosyalarından Visual Studio eklentilerine ve Windows Media Player ’ı hiçbir sorunsuz bir biçimde ekleyebilmekteyiz.

Yukarıda belirttiğimiz eklentiler dışında UIElement ve FrameworkElement ile geliştirilmiş uygulamaları da sorunsuz bir biçimde kullanabilmemiz mümkündür. Örnek senaryolar ile kullanılabilirliği açıklamaya çalışalım:

• Messenger stili uygulamalar geliştirilebilmesi mümkündür. Arka planda oluşturulmuş olan web servisleri ile kendimiz tarafından geliştirilmiş bir 3. Parti yazılımımız olabilir.

• Oyun uygulamaları geliştirerek belirli bir host ile kullanıma sunabiliriz.

• İçerik tarayıcı oluşturabilmemiz mümkündür. Kendime ait bir PDF Reader imiz olabilir.

• Mashup tarzı uygulamalar geliştirebilmemiz mümkündür. Örnek olarak Windows Sidebar ’ları

ve bu senaryoların dışında tarayıcılar üzerinde çalışabilecek sınırsız sayıda XBAP uygulamaları geliştirebilmemiz mümkündür.

WPF ’te Add-In ile ilgili daha ayrıntılı bir yazımız yakın zamanda sitemizde yer alacaktır.

Firefox ile XBAP

WPF 3.5 ’da Firefox 2.0 da XBAP uygulamalarının çalışmasına olanak sağlamıştı. Şimdi WPF 3.0 ile Firefox kullanıcılarının başına gelen ve çözülmüş olan birkaç sorundan bahsedelim:

Varsayılan tarayıcısı Firefox 2.0 olan geliştiricilerde XBAP uygulamalarını derlemek neredeyse bir kabul durumuna gelmişti. Çünkü bu uygulamalar çalıştırılmak istendiğinde tarayıcıya fazladan yüklenerek kilitlenmesine sebep olmaktaydı. Bu geliştiricinin sisteminde Internet Explorer ’da yüklü değilse geliştirmiş olduğu XBAP uygulamalarını test edememekteydi.

Karşılaşılan bir diğer sorun ise alternatif yollarla XBAP uygulamasını Firefox ’ta çalıştırma başarısını gösteren geliştiricilerde Internet Explorer ’da sağlanan güvenliklerin hiç biri sağlanmıyor olmasıdır. Bu durum uygulama internet üzerinde çalışırken kötü düşünceli bilgisayar korsanları tarafından sistemimize girilmesi olacaktır.

Cookie

Tarayıcılarda XBAP uygulamaları derlendiği zaman arka planda oluşturulan oturum dosyalarını otomatik olarak siliyordu. WPF3.5 ile bu oluşturulan cookieler biz istemediğimiz sürece silinmez suruma geldi. Bu sayede XBAP, tarayıcılar tarafından web servis ve HTML gibi algılanmaktadır.

Visual Studio IntelliSense

Visual Studio ‘nun XAML editörüne eklenen yeni elementleri artık IntelliSense ’te yardımı ile erişebiliyoruz.

Localization

WPF3.5 ‘in bünyesine eklenmiş olan yeni dil aileleri aşağıdakilerdir.

Bengali
Devanagari
Gujarati
Gurmukhi
Kannada
Malayalam
Oriya
Tamil
Telugu

Grafik

WPF ’in grafik objeleri sayısal veri olarak tuttuğunu ve bu yöntem sayesinde oldukça hızlı olduğundan defalarca bahsetmiştik. Bu sayısal yöntem dışında internet üzerinden ya da yerel bilgisayarımızdan resimleri alabilmemiz mümkündür. İşte grafiksel olarak eklenen öğeler için 4 adet daha Bitmap metodu oluşturulmuş. Bu metotlara ve aldıklara parametrelere bir göz atalım.

BitmapImage.UriCachePolicy

BitmapDecoder.Create(Uri, BitmapCreateOptions, BitmapCacheOption, RequestCachePolicy)

BitmapFrame.Create(Uri, RequestCachePolicy)

BitmapFrame.Create(Uri, BitmapCreateOptions, BitmapCacheOption, RequestCachePolicy)

Bu metotlar yardımı ile istediğimiz görüntüleri daha farklı özelliklerle uygulamamızda kullanma olanağımız oluşmuştur.

3-D Grafik

Yeni nesneler ve sınıflar geliştirilmiş ve WPF3.5 bünyesine eklenmiştir. En göze batan özellik ise enteraktif uygulamaların boyutsal dönüşümlerde kullanılacak olan yeni bir sınıf oluşturulmuş olmasıdır.

Enteraktif 2-D ve 3-D Uygulamaları

Viewport2DVisual3D isimli yeni bir oluşturulmuştur. Bu sınıf sayesinde enteraktif olarak alınmış 2D görüntülerin içeriği 3D ‘ye dönüştürülebilmektedir.

Data Binding

Bu özellik ilgili birkaç iyileştirme yapılmıştır. Bunlar:

Yeni bir debug mekanizması oluşturuldu. Bu sayede binding yaptığımız kodları da kolayca debug yapabileceğiz.

Business Layer ’da oluşabilecek hatalara karşı IDataErrorInfo metot iyileştirilmiştir. Bu model yardımı ile kullandığımız özelliklerde karşılaşabileceğimiz hatalardan haberdar olmamız sağlanmıştır.

Data Binding modeli Linq ve Dlinq ile ilişkilendirilebilir oldu.

Yeni Debug Mekanizması

Data Binding işlemlerinde debug işlemlerinin yapılmasının kolaylaştırıldığı bilgisini vermiştik. Bu işlemin gerçekleşmesini PresentationTraceSources.TraceLevel özelliğinin debug yapısına eklenmesi ile sağlanmıştır.

Bu son özelliğimizi incelememiz ile WPF ’e .NET Framework 3.5 ile eklenmiş olan yeni özellikleri bitirmiş oluyoruz. Genel olarak eksiklerin tamamlanması ve hazırlanmış olan sınıfların iyileştirilmesine ağırlık verildiğini gözlemlemiş oluyoruz.

Daha sonraki WPF ile ilgili yazılarımızda WPF bünyesinden yer alan sınıfları, metotları, veri yapılarını ve özelliklerini incelemeye devam edeceğiz.

Bir sonraki yazımızda görüşünceye dek esenlikle kalın.

İyi çalışmalar…

Turhal TEMİZER