Makale Özeti

Silverlight 3.0 Beta ile geliştirdiğiniz projeleri RTW final sürümüne yükseltirken karşılaşabileceğiniz sorunlara ve Beta ile RTW arasındaki değişikliklere değindiğimiz bu makale ile beraber Silverlight 3.0 dünyasında hızlı bir giriş de yapabilirsiniz.

Makale

Heyecanle beklenen an geldi ve Silverlight 3 yayınlandı. Beta sürümünden Release'e kadar olan değişikliklere göz atacağımız bu yazıda önce gelin Silverlight 3 dünyasına hızlıca nasıl gireriz bir göz atalım.

http://www.silverlight.net/getstarted

Silverlight dünyasına girmenin en kolay yolu hemen yukarıdaki adresi ziyaret etmek. Bu adres içerisinde Silverlight 3 tarafında bilgisayarınıza yüklemeniz gereken herşeyi bulabilirsiniz. Unutmadan, eğer bilgisayarınızda Silverlight 3 Beta yüklemeleri varsa herşeyin öncesinde bu yüklemeleri bilgisayarınızdan kaldırmayı unutmayın.

Silverlight 3.0 Yüklemeleri
Silverlight 3.0 Yüklemeleri

Yukarıdaki ekran görüntüsünde silverlight.net sitesinin bir parçasını görüyorsunuz. Burada ilk aşamada yer alan yüklemelere özellikle dikkat etmek gerek. "Web Platform Installer" olarak geçen yükleme paketi bilgisayarınız için gerekli tüm yüklemeleri yapabilir. Bu yüklemeler içerisinde Visual Studio'nun Express sürümü ve SQL Express de dahil. WPI ile ilgili ayrı bir yazı yazılabilir fakat şimdilik kabaca genel anlamına değinmek yeterli olacaktır diye tahmin ediyorum. WPI'ın amacı bilgisayarınıza tüm yazılım geliştirme platformunu yüklemektir. Yükleme esnasından ASP.NET MVC'den PHP modüllerine kadar istediklerinizi seçebilirsiniz.

Eğer bilgisayarınızda hali hazırda Visual Studio yüklü ise be zaten "benim platformum hazır" diyorsanız bu sefer hızlıca "download the tools directly" linkine tıklayıp Visual Studio Tools for Silverlight paketini indirebilirsiniz. Böylece yazılım geliştirme ortamınız Silverlight 3.0 ile tanışmış olacaktır.

Expression Blend 3 RC

Silverlight 3.0 ile beraber tabi ki yeni bir de Blend sürümüne ihtiyacımız var. Expression Studio 3 daha yayınlanmadığı için Silverlight 3.0'a özel olarak Expression Blend 3'ün RC sürümü Silverlight'cılarla paylaşıldı. Çok yakın zamanda Expression Studio 3 ile beraber Blend 3 de release olacak. Şimdilik RC sürümü ile dahatlıkla idare edebilirsiniz. Sketchflow kısmı eminim ki dikkatinizi çekecektir. Bu konuda uzun uzun makale ve seminer planlarım var :)

Silverlight Toolkit ve DeepZoom tarafında da yeni gelişmeler var. İndirip yeni sürümlerini ücretsiz olarak bilgisayarınıza kurabilirsiniz. Özellikle DeepZoom Composer tarafında yeni menü navigasyon sistemlerini incelemenizi tavsiye ederim. Ayrı makaleler bu konuda da çok yakında karşınızda olacak.

Silverlight 3.0 RTW ile değişenler?

En büyük değişikliklerden biri Silverlight 3.0 SDK içerisinde yer alan bazı kontrollerin doğrudan Toolkit içine taşınmış olması. Bu duruma çok farklı yorumlar getirmek mümkün fakat esas yapılmak istenen şey bu kontrolleri SDK içerisine eklemeden önce biraz daha feedback almak ve bu süreçte de kontrolleri açık kaynak kodları ile beraber yazılım geliştiriciler ile paylaşabilmek. O nedenle aşağıdaki kontrollerin hepsi Beta SDK içerisinden Toolkit tarafına kaydırıldı.

DockPanel, WrapPanel, Expander, HeaderedContentControl, Viewbox,
DataForm, ExpandDirection, ExpanderAutomationPeer, LengthConverter, StretchDirection

DataForm ve DataPager

DataForm ve DataPager kontrollerinde büyük değişiklikler oldu. Artık DataForm kontrolünün Fields adında bir collection'ı yok. Onun yerine eskiden de olan Edit ve Normal modlar için özeleştirme sağlayan Template yapıları kullanılacak. Eski Template yapılarında tasarımı sıfırdan yaratırken bu sefer Template'ler içerisinde IPagedCollectionView adında kontroller de kullanabileceğiz. Söz konusu DataField'ler içerisine kendi kontrollerini koyarak özelleştirmeler yapabilirsiniz. Açıkçası bu değişiklik benim çok hoşuma gitmedi. Eskisi özellikle DataGrid ile çok daha uyumlu bir yazılımcı deneyimi sağlıyordu. Fakat özünde bu değişikliklerin tekrar değişmesi de olası, çünkü ne de olsa bu kontroller Toolkit içerisinde.

DataPager kontrolü tarafında ise IPagedCollectionView sınırlaması kaldırılarak artık herhangi bir IEnumerable kullanılabilmesi sağlanmış.

MetaAttributes

Özellikle DataForm içerisinde Fields Collection'ın kaldırılması sonrasında canım biraz sıkılmıştı ki MetaAttributes tarafındaki değişiklikler keyfimi yine getirdi. Genelde ister DataGrid olsun ister DataForm, bizim Fields veya Columns collectionları editlememizin esas nedeni bir kolonu göstermek istemememizden veya editlenmesini istememizden kaynaklanır. AutoGenereateColumns/Fields özelliklerini sevsek de kolon başına ayar yapabilmek için Field'leri elle yaratmamız gerekiyordu.

[VB]

    <Bindable(True, BindingDirection.TwoWay)> _

    Private _Ornek As String

    Public Property Ornek() As String

        Get

            Return _Ornek

        End Get

        Set(ByVal value As String)

            _Ornek = value

        End Set

    End Property

Eskiden uygulayabildiğimiz yukarıdaki teknik ile bir Property'nin Bindable olup olmadığını hatta ne şekilde Bind edilebileceğini de ayarlayabiliyorduk. Yeni SL 3.0 RTW ile bu MetaAttribute'ler biraz değişti.

[VB]

    <Display(AutoGenerateField:=True)> _

    <Editable(False)> _

    Private _Ornek As String

    Public Property Ornek() As String

        Get

            Return _Ornek

        End Get

        Set(ByVal value As String)

            _Ornek = value

        End Set

    End Property

Artık çok daha kolay bir şekilde doğrudan bir Property'nin AutoGenerateField aşamasında yaratılıp yaratılmayacağını belirleyebiliyor veya Editable ile bu özelliğini editlenebilir olup olmadığı bilgisini de aktarabiliyoruz. Bunun gibi yaratılacak olan kolonun kaçıncı sırada olacağını veya kolon adını da aşağıdaki şekilde belirtebilirsiniz.

[VB]

    <Display(AutoGenerateField:=True, Name:="Kolon Adı", Order:=1)> _

    <Editable(False)> _

    Private _Ornek As String ....

Navigation Framework

Silverlight 3.0 Beta ile karşılaştığımız Navigation Framework içerisinde de ciddi değişiklikler var. Eski halinde UriMapper'ımızı App.XAML içerisinde yaratmak zorunda olup bir de bunun üzerine yarattığımız Mapper sınıfının instance'ına ait ismin de uriMapper olmak zorunda olması ciddi anlamda saçmalıktı :) Tabi ki bu durum düzeltilmiş ve artık uriMapper'larınızı UserControl içerisinde de yaratabiliyor ve istediğiniz ismi verebiliyorsunuz. Sonrasında da uriMapper'ı elle istediğiniz bir frame'e bağlamanız gerekiyor.

[XAML]

....

    <UserControl.Resources>

        <navigationCore:UriMapper x:Key="HerhangiBirMapper">

            <navigationCore:UriMapping Uri="Siparis" MappedUri="/Sayfalar/Siparis.xaml" />

        </navigationCore:UriMapper>

    </UserControl.Resources>

    <Grid x:Name="LayoutRoot">

        <navigation:Frame x:Name="frame" UriMapper="{StaticResource HerhangiBirMapper}" />

    </Grid>
.....

Son olarak eskiden herhangi bir UserControl'ü de içine alabilen frame'ler artık sadece Page'den Inherit edilmiş sayfaları alabilecek.

Diğer mini değişiklikler...

PixelShader Efektleri : Eskiden Content veya Resource olarak projelere eklenebilen PS dosyaları rahatlıkla kullanılabiliyordu artık sadece Resource olarak ayarlanmış PS dosyaları PixelShader olarak kullanılabilecek.

OutOfBrowser Desktop Uygulamaları: Eskiden Detach komutu yeni sürümde Install olarak değiştirildi. Yeni komut : App.Current.Install() Aynı şekilde eski App.Current.RunningOffline da App.Current.IsRunningOutOfBrowser oldu. ExecutionStateChanged, InstallStateChanged şeklinde değiştirildi. Ayrıca OutOfBrowser uygulamaları ile ilgili yaratılan XAML kodu da tamamen değiştirilecek harici bir OutOfBrowserSettings.xml dosyasında tutulması gerekiyor.

[OutOfBrowserSettings.xml]

<OutOfBrowserSettings ShortName="Kısayol Adı" EnableGPUAcceleration="False" ShowInstallMenuItem="True">

  <OutOfBrowserSettings.Blurb>Açıklama tooltip</OutOfBrowserSettings.Blurb>

  <OutOfBrowserSettings.WindowSettings>

    <WindowSettings Title="Pencere adı" />

  </OutOfBrowserSettings.WindowSettings>

  <OutOfBrowserSettings.Icons>

    <Icon Size="16,16">1.png</Icon>

    <Icon Size="32,32">2.png</Icon>

    <Icon Size="48,48">3.png</Icon>

    <Icon Size="128,128">4.png</Icon>

  </OutOfBrowserSettings.Icons>

</OutOfBrowserSettings>

Visual Studio 2008'de Design arayüzü? Artık yok! Yanlış duymadınız :) artık Visual Studio 2008 içerisinde Silverlight XAML dosyalarını açtığınızda otomatik olarak XAML kod kısmı açılacak ve Preview kısmı olmayacak. Aslında bu kadar çok doğru bir karar çünkü design modunda "design" yapılamadığı için :) zaten pek de anlamlı olmuyordu ve gereksiz yere işleyişi yavaşlatıyordu. Visual Studio 2010'a kadar Silverlight projelerinde Visual Studio içerisinde design penceresi olmayacak.

Silverlight.js dosyasında ufak değişiklikler var. İsteyenler hemen buradan indirebilirler: http://code.msdn.microsoft.com/silverlightjs

.NET Ria Services artık Go-Live lisansına sahip. Yani sorumluluk size ait olsa da kullandığınız projeleri yayınlayabilirsiniz. Fakat bu tabi ki RIA Services'in release olduğu anlamına gelmiyor.

Eminim ki unuttuğum bir çok değişiklik veya yenilik vardır. Onları da en kısa zamanda ayrı ayrı makaleler olarak sizlerle paylaşmak üzere...