IronPython’ı Visual Studio içerisinde çalıştırarak silverlight geliştirme önceki yöntemlere göre hem daha kolay hem daha pratik, bir önceki makalemizde Visual Studio içerisinde nasıl çalıştırılır bunu gördük. Artık IronPython ile silverlight uygulamaları geliştirmeye başlayabiliriz. Bundan makaleden itibaren başlangıç mahiyetinde olup, önümüzdeki makalelerde python yapısını silverlight üzerinde öğrenerek proje geliştirmeye kadar ilerleyeceğiz. Ayrıca Silverlight nesnelerinin renk ve görünümlerini değiştirerek de estetik görüntüler elde etmenizi sağlayacağım.
Şimdi basit bir uygulama ile başlayarak, butonlara nasıl click event’ı atanır ve fonksiyonel programlama nasıl yapılır onu göreceğiz.
Projemizin kodları aşağıdaki gibi olacaktır;
app.xaml
1 <UserControl
2 xmlns="http://schemas.microsoft.com/client/2007"
3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
6 x:Class="System.Windows.Controls.UserControl"
7 mc:Ignorable="d"
8
9 <Grid x:Name="layout_root">
10 <Grid.Background>
11 <RadialGradientBrush>
12 <GradientStop Color="#FF56A8D6"/>
13 <GradientStop Color="#FF15628E" Offset="1"/>
14 </RadialGradientBrush>
15 </Grid.Background>
16 <TextBlock x:Name="Message" Foreground="White" FontSize="30"
Height="45" VerticalAlignment="Top"/>
17 <Button Margin="185,49,0,0" Width="75" Height="30"
x:Name="Buton" Content="Tikla" HorizontalAlignment="Left"
VerticalAlignment="Top" d:LayoutOverrides="Width, Height"/>
18 </Grid>
19 </UserControl>
app.py
1 from System.Windows import Application
2 from System.Windows.Controls import UserControl
3
4 proje = Application.Current.LoadRootVisual(UserControl(),
'app.xaml')
5
6 tiklanma_sayisi = 0
7
8 def onClickButton(sender, args):
9 tiklanma_sayisi = tiklanma_sayisi + 1
10 proje.Message.Text = tiklanma.ToString() + "." +
" Kez Buton Tiklandi!!"
11 sender.Content = "Tiklandi"
12
13 proje.Buton.Click += onClickButton
Projemize bir göz atalım şimdi de
Buton’a tıklandığı zaman hem buton’un content’i değişecek hem de textbox’ın içeriği
proje = Application.Current.LoadRootVisual(UserControl(), 'app.xaml')
# kodu ile IronPython kodu ile xaml uzantılı dosyaya eriştik ve içeriğini proje değişkenine atadık. Dikkatinizi çektiği gibi proje değişkenin tipini önceden belirtmedik ilk defa yazıp atamayı yaptık. Bu IronPython dilinin dinamikliği sayesinde oldu. Bildiğimiz gibi dinamik dillerde tip tanımlamaları yoktu.
tiklanma_sayisi = 0
#aynı şekilde tip tanımlaması yapmadan tıklanma sayısını tutacak değişkenimize de başlangıç değeri olarak 0 atadık.
#aşağıdaki fonksiyonumuzda da butona tıklandığı zaman textbox’ın içeriğine kaçıncı kez tıklandığı atanacak ve Buton’un içeriği “Tıklandı” olarak değişecek.
def onClickButton(sender, args):
tiklanma_sayisi = tiklanma_sayisi + 1
proje.Message.Text = tiklanma.ToString() + "." + " Kez Buton Tiklandi!!"
sender.Content = "Tiklandi"
proje.Buton.Click += onClickButton
# Burada Buton’un Click event’ını atamış olduk.
Şimdi de uygulamamıza bir listbox ekleyelim ve her tıklamada kaçıncı kez tıklandığını eleman olarak listeye atsın.
app.py’deki onClickButton özelliğine bakalım
1 def onClickButton(sender, args):
2 global tiklanma
3 global proje
4 tiklanma = tiklanma + 1
5 proje.Message.Text = tiklanma.ToString() + "." +
" Kez Buton Tiklandi!!"
6 sender.Content = "Tiklandi"
7 proje.Listt.Items.Add(tiklanma.ToString() + "." +
" tiklama")
app.xaml’in grid içeriği
1 <Grid x:Name="layout_root">
2 <Grid.Background>
3 <RadialGradientBrush>
4 <GradientStop Color="#FF56A8D6"/>
5 <GradientStop Color="#FF15628E" Offset="1"/>
6 </RadialGradientBrush>
7 </Grid.Background>
8 <TextBlock x:Name="Message" Foreground="White"
FontSize="30" Height="45" VerticalAlignment="Top"/>
9 <ListBox Width="173" x:Name="Listt"
HorizontalAlignment="Left" Margin="8,45,0,0" Height="251"
VerticalAlignment="Top" Foreground="White">
10 <ListBox.Background>
11 <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
12 <GradientStop Color="#FFA3AEB9" Offset="0"/>
13 <GradientStop Color="#FF8399A9" Offset="0.228"/>
14 <GradientStop Color="#FF718597" Offset="0.228"/>
15 <GradientStop Color="#FF627786" Offset="1"/>
16 </LinearGradientBrush>
17 </ListBox.Background>
18 </ListBox>
19 <Button Margin="185,49,0,0" Width="75" Height="30"
x:Name="Buton" Content="Tikla" HorizontalAlignment="Left"
VerticalAlignment="Top" d:LayoutOverrides="Width, Height"/>
20 </Grid>