Silverlight teknolojilerinde direkt olarak desteklediği diller arasında C# ve Visual Basic bulunmaktaydı. Silverlight’ın 1.1 sürümünden itibaren Silverlight 2.0 ‘da bulunan dinamik dil desteği bulunmakta.
Sonunda IronPython ile Silverlight uygulaması geliştireceğiz...
Dynamic Language Runtime (DLR) ile çalışan dillerden
IronPython, IronRuby ve Managed JScript dillerinde rahatlıkla Silverlight
geliştirme yapılabilmekte.
“The Silverlight Dynamic Languages” şeklinde adlandırılan ve
.NET kütüphanelerini dinamik dillerle rahatlıkla kullanabilen bir ortamdır.
Buradan Silverlight Dynamic languages geliştirme SDK’sına ulaşabilirsiniz.
Ekim 15te çıkan 0.4.0 versiyonu ile Silverlight 2 tam sürümüyle sorunsuzca
çalışmaktadır.
Bu SDK içerisinde istediğiniz dinamik dil klasörü içinde
geliştirilmiş örnek projeler bulunmakta ve Chiron dosyaları bulunmaktadır.
Silverlight geliştirme Dinamik dillerde biraz zahmetli bir
iş şimdilik. Expression Blendle veya Visual Studio da direkt olarak editleyip
test edemiyoruz. Bu yüzden dışarıda kodlamamız ve yayına hazır hale gelirmemiz
gerekecek.
Bildiğimiz gibi Silverlight projelerinin browserımızda
yorumlanması için sıkıştırılmış dosyalar olan .xap bilgi dosyaları gerekmekte.
XAP dosyaları aslında projemizde bulunan xaml ve code-behind kodlarımızın DLL
dosyalarına dönüştürüldükten sonra silverlight uygulamamızın bilgilerini
barındıran bir nevi zip dosyaları idi. Projemizin XAP kodunuz dışardan salt
kodla üretmek büyük bir problem. Bu yüzden Dynamic Languages SDK ile birlikte
gelen Chiron web server’ını kullanmamız gerekcek.
Chiron Nedir?
Chrion DLR(Dynamic Language Runtime) tabanlı diller için Silverlight geliştirme aracıdır. XAP dosyası oluşturur ve web server gibi çalışır. Xaml kodlarını ve altında çalışan dil
ile kodladığımız silverlight uygulamalarını browserde çalışır hale getirir.
Chiron geliştirdiğimiz projelerde XAP dosyası oluşturur ve
localhostta server’inde uygulamamızı çalıştırmamıza yardımcı olur.
Chiron exe halinde bulunur ve cmd ile birlikte çalışır. Chiron’un tüm
özelliklerine onu aşağıdaki gibi çağırdığımızda erişebiliriz.
Proje hiyerarşimiz:
Projem\
Projem \index.html
Projem \app\
Projem \app\app.py
Projem\app\app.xaml
Projem\ assets\
şeklinde olacak ve proje kodlarına bakacak olursak:
app.xaml
<Canvas
x:Class="System.Windows.Controls.Canvas"
xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x=
http://schemas.microsoft.com/winfx/2006/xaml
x:Name="parentCanvas">
<TextBlock Height="42" FontSize="28" Margin="36,40,170,0" VerticalAlignment="Top" x:Name="metin">Wooow,
Supeeer!</TextBlock>
<Button
Height="38" HorizontalAlignment="Left"
Margin="27,103,0,0" VerticalAlignment="Top"
Width="112" Content="Dugme" x:Name="dugme"/>
</Canvas>
app.py
from System.Windows import
Application
from System.Windows.Controls import Canvas
xaml = Application.Current.LoadRootVisual(Canvas(), "app.xaml")
xaml.metin.Text = 'Wooow, Supeeer!'
xaml.dugme.Content = 'Dugme'
index.html
<!DOCTYPE
html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>IronPython + Silverlight =
<3</title>
<style type="text/css">
#silverlightControlHost {
margin: 20px;
}
</style>
<script
type="text/javascript">
function onSilverlightError(sender,
args) {
if (args.errorType ==
"InitializeError")
{
var errorDiv = document.getElementById("errorLocation");
if (errorDiv != null)
errorDiv.innerHTML =
args.errorType + "- " + args.errorMessage;
}
}
</script>
</head>
<body>
<!--
Syntax/Runtime errors from Silverlight
will be displayed here.
This will contain debugging information
and should be removed
or hidden when debugging is completed
-->
<div id='errorLocation'
style="font-size: small;color: Gray;"></div>
<div id="silverlightControlHost"
width="480" height="320">
<object
data="data:application/x-silverlight,"
type="application/x-silverlight-2-b1" width="480"
height="320">
<param name="source"
value="app.xap"/>
<param name="onerror"
value="onSilverlightError" />
<param name="background"
value="#00000000" />
<param
name="initParams" value="reportErrors=errorLocation" />
<param
name="windowless" value="true" />
<a href="http://go.microsoft.com/fwlink/?LinkID=108182"
style="text-decoration: none;">
<img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get
Microsoft Silverlight" style="border-style: none"/>
</a>
</object>
<iframe
style='visibility:hidden;height:0;width:0;border:0px'></iframe>
</div>
</body>
</html>
öncelikle oluşturduğumuz silverlight projesinin XAP paketini hazırlayalım.XAP
paketi Projem klasörünün içerinde oluşacak
>Chiron.exe /directory:Projem\app /zipdlr:app.xap
Bu işlemi yaparken SDK’nın içinde bulunan bin klasöründeki
tüm dosyalar proje klasörü ile aynı klasörde olması gerekiyor.
Bu XAP dosyası dll’ler ve gerekli program kodlarını ekleyecek.
Eklenen XAP Dosyamızın içeriğine bakarsak. Bildiğiniz gibi
normalde C# silverlight projemiz derlendikten sonra xaml ve .cs uzantılı kod
dosyaları dll assembly dosyasına dönüşüyordu fakat, Dynamic dillerde dll’e
dönüştürmeden olduğu gibi ekleniyor.
Daha sonra da projemizde
Chiron ‘ı web-server olarak çalıştırma:
> cd Projem
> Chiron.exe /webserver
Chiron uygulması böylelikle web server’ı şeklinde çalışacak
ve localhost:2060 da kökdizinini çalıştıracaktır.
Buradan index.htm
dosyasını tıklayarak çalışmamızı görebiliriz.
Yalnız geliştime yapmak bahsettiğim gibi biraz zahmetli ama
IronPythonla yapılmasına değecek bir zahmet :) Ben xaml geliştirme için normal
Expression Blend de C# ile normal bir projede geliştirme yapıp o projenin XAML kodlarını
kopyalayarak çalışmak istediğim dosyama yapıştırıyorum. Diğer fonksiyonları ise
elle yazarak hazır hale getiriyorum.
Daha kısa yollar keşfettikçe sizlerle paylaşacağım.
Takıldığınız, sormak istediğiniz veya düzeltmek istediğiniz yerleri
ibrahim.kivanc@msakademik.net
mail adresime iletebilirsiniz
Hepinize Kolay gelsin..