23 Oca 2009 Silverlight ile Web Servislerinin Kullanılması Kategori: Silverlight Etiketler: Silverlight 1 Yorum Herkese merhabalar, bu makalemizde Silverlight ile web servislerini konuşturarak web servis aracılığıyla çesitli islemler yapacağız.Silverlight üzerinde doğrudan sunucu taraflı veritabani erişimi olmadığı için XML yada Web Servisleri gibi farklı aracılar ile veri alişverisini sağlayabiliyoruz. Bu makalemizde de silverlight uygulamalarında web servisinin nasıl kullanildığına, veri alişverişinin nasil yapıldığına bakacağız. İlk olarak Visual Studio 2008’i açalım ve yeni bir silverlight projesi başlatalım. (Eger ilk kez silverlight ile uygulama geliştiriyorsak burayıokumanızı tavsiye ederim). Solution üzerinde bize 2 adet proje açılıyor. Biri geliştireceğimiz silverlight projesi diğeri ise geliştirdiğimiz uygulamayı test edebilmemiz için eklenen test projesi. Test projesine yeni bir web servis dosyası ekleyelim. Burada uygulamamızda kullanacagımız servisi hazırlayacagız. İlk olarak basit bir örnek ile konuya girelim. Örneğimiz de basitçe bir login ekranı tasarlayacagız. Silverlight uygulaması üzerinde kullanıcı adı ve sifre için textboxlar olacak. Kullanıcı, kullanıcı adi ve şifresini girip butona bastığında servise bağlanacak ve duruma göre kullanıcıya olumlu yada olumsuz bilgi dönecek. Simdi web servisimizi hazırlayalım. [WebMethod]publicbool KullaniciKontrol(string kullaniciAdi, string sifre){ if(kullaniciAdi=="semgoksu" && sifre == "12345") { return true; } else { returnfalse; }} Web servisimizi hazırladık şimdi silverlight uygulamasında kullanacağımız arayüzü hazırlayalım. Bunun için silverlight projemizi Expression Blend’de açalım. <UserControlx:Class="SilverlightWebServisOrtakligi.Page"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Width="400" Height="300" xmlns:d=http://schemas.microsoft.com/expression/blend/2008 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"> <Grid x:Name="LayoutRoot" Background="White"><TextBox Margin="167,126,112,0"V erticalAlignment="Top" Text="" TextWrapping="Wrap" x:Name="txtKullaniciAdi"/><TextBox Margin="167,0,112,122" Text="" TextWrapping="Wrap" VerticalAlignment="Bottom" x:Name="txtSifre"/><Button HorizontalAlignment="Right" Margin="0,0,112,96" VerticalAlignment="Bottom"Content="Kontrol Et" x:Name="btnKontrolEt"/><TextBlock HorizontalAlignment="Left" Margin="133,0,0,126" Text="Sifre" TextWrapping="Wrap" VerticalAlignment="Bottom" FontWeight="Bold"/><TextBlock HorizontalAlignment="Left" Margin="85,128,0,0" VerticalAlignment="Top" Text="Kullanici Adi"TextWrapping="Wrap" FontWeight="Bold"/><TextBlock Margin="90,79,121,0" VerticalAlignment="Top" Text="ÜYE GIRISI" TextWrapping="Wrap" FontWeight="Bold" FontSize="16" Foreground="#FFFF0000"/></Grid></UserControl>Web Servisimiz ve formumuz hazir simdi tekrar visual studio 2008’e dönelim. Silverlight projesinin üzerine gelelim sag tıklayarak , Add Service Reference… tıklayalım. Gelen pencereden discover’a tıklarsak projemiz üzerinde ki servisi bulacaktır. Servise bir isim verip projemize ekleyelim. Silverlight projesine servisi ekledikten sonra artık yapmamız gereken butona tıklandiginda servise bağlanıp ilgilili metoda parametreleri yollamak. Bunun için paga.xaml.cs’e gidip Butonumuz için bir click event listener olusturalım. Sonrasında da referans olarak eklediğimiz servisin örneğini olusturalım. ServiceReference1.WebService1SoapClient loginServis = new SilverlightWebServisOrtakligi.ServiceReference1.WebService1SoapClient(); public Page(){ InitializeComponent(); btnKontrolEt.Click += new RoutedEventHandler(btnKontrolEt_Click);} void btnKontrolEt_Click(object sender, RoutedEventArgs e){ loginServis.KullaniciKontrolAsync(txtKullaniciAdi.Text, txtSifre.Text);} Dikkat edersek metodumuzun ismi bizim verdigimizden biraz daha farkli bir şekilde geldi. Bunun da nedeni silverlightın varsayılan şekli ile web servisleriyle asenkron olarak çalısıyor olmasındandır. KullaniciKontrolAsyncmetodu ile servise asenkron bir çagrıda bulunuldu. Peki çagrının sonucunu nasıl alacagız? Bunun da çözümü çok basit, metodumuz ile aynı isimde ve sonuna Completed eklenmiş bir event var. (Bu tüm metodlar için geçerli). Bu event tetiklendiginde bize eventarguman'dan result isimli bir property dönüyor. Bu property metodumuzun geri dönüş tipi ile aynı tipte oluyor. Şimdi KullaniciKontrolCompleted eventini oluşturup login işleminin sonucunu alalım. public Page(){ InitializeComponent(); btnKontrolEt.Click += new RoutedEventHandler(btnKontrolEt_Click); loginServis.KullaniciKontrolCompleted += new EventHandler<SilverlightWebServisOrtakligi.ServiceReference1.KullaniciKontrolCompletedEventArgs>(loginServis_KullaniciKontrolCompleted);} void loginServis_KullaniciKontrolCompleted(object sender, SilverlightWebServisOrtakligi.ServiceReference1.KullaniciKontrolCompletedEventArgs e){ bool sonuc = e.Result; if (sonuc) { MessageBox.Show("Giris Basarili"); } else { MessageBox.Show("Giris Hatali"); }} Evet şimdilik yapacaklarımız bu kadar artık uygulamamızı test edebiliriz. Uygulamamızın başarılı bir şekilde çalıştığını gördük. Uygulamayı bir adım daha ileri götürüp animasyon ile biraz daha süsleyebilirsiniz. Örnek kodlar için tiklayinizMakalemizin sonuna geldik, başka bir makalede görüşmek dileğiyle. .NET ve Silverlight ile kalin ;) Sem GÖKSUwww.semgoksu.com| www.yazilimgunlugu.comsem.goksu@yazilimgunlugu.com Kaynaklarmsdn.comsilverlight.netdaron.yondem.com
21 Oca 2009 .NET Framework Üye Sayiları Kategori: Yazılım Etiketler: .NET Framework 0 Yorum Her birini bilmeyi çok isterdim. Gerçekten öğrenilmesi gereken çok sey var. Framework 4.0 ile birlikte vay halimize diyorum :)Kaynakhttp://blogs.msdn.com/brada/archive/2008/03/17/number-of-types-in-the-net-framework.aspx
20 Oca 2009 Silverlight XAP Dosyasi IIS Mime Type Ayarı Kategori: Yazılım Etiketler: Silverlight 1 Yorum Silverlight 2.0 ile birlikte silverlight uygulamalarini projelerimize ekleyebilmemiz için XAP uzantılı bir dosya ile export edebiliyoruz. Fakat IIS bu dosyayı tanımadığı için yaptığımız uygulamalar çalısmıyor. Bunu çözmek için iki yöntem var. Ya IIS'in Mime Type'larını XAP için bir mime type ekleriz ya da export olan XAP dosyasının uzantısını ZIP'e çeviririz.IIS'de yeni bir Mime Type tanımlamak için,- IIS Manager'i açalım.- IIS Üzerinde sağ tıklayarak Properties(Özellikleri) açalım.- Açılan pencere de Mime Type butonuna tıklayalım.- New butonuna tıklayarak XAP için gerekli olan Mime Type'i ekleyebiliriz.
20 Oca 2009 Silverlight MediaElement Kontrolü Kategori: Silverlight Etiketler: Silverlight 1 Yorum Merhaba arkadaslar, bu makalemizde silverlight’in bize sunmus oldugu MediaElement kontrolünün ne ise yaradigini, nerelerde ve nasil kullanildigini inceliyor olacagiz. Media elementi, silverlight uygulamalarinda video oynatmak için kullanabilecegimiz bir kontroldür.MediaElement kontrolü video oynatma uygulamaları geliştirebilmemiz için silverlight’in bize sunmuş olduğu bir kontrol. MediaElement kontrolü ile mp3 ve wmv dosyalarını oynatabiliyoruz. MediaElement kontrolünü incelediğimizde işimize çok yarayacak metotlar, özellikleri ve eventleri var. Şimdi bunları biraz inceleyelim.Play() Play metodu, MediaElementi Kontrolüne kaynak olarak belirtilen videonun oynatilmasını sağlar. Pause() Pause metodu, videonun duraklatılmasını sağlar. Stop()Stop metodu da videonun durdurulmasını sağlar. AutoPlayBu özellik videonun otomatik olarak oynatılıp oynatılmayacağını belirler. True yada False değeri alır.IsMutedBu özellik videonun sessiz modda olup olmadığını belirler. True yada False değeri alır.OpacityVideonun opazite(görünüm) oraninin ayarini belirleyen özelliktir. Double tipinde bir deger atanabilir.SourceMediaElementinde oynatilacak videoyu belirtmemizi saglayan özellik. Uri tipinde deger atayabiliyoruz.StretchStretch özelligi videonun MediaElementine nasil yerlestirilecegini belirliyor. Üç özellik alabiliyor. Uniform, UniformToFill ve Fill.VolumeVideonun ses oranini belirleyen özellik. Double tipinde deger atanabilir.MediaOpenedMediaElementindeki video basladiginda tetiklenecek olan event(olay)’dir.MediaEndedMediaElementindeki video bittiginde tetiklenecek olan event(olay)’dir.DownloadProgressChangedMediaElementindeki videonun donwload edildikçe oluşan eventidir..BufferingProgressChangedMedia elementindeki videonun buffer olma(önbelleklenme) yapıldıkça oluşacak olan eventidir.MediaElementini biliyoruz, özelliklerini de biliyoruz. O zaman artik video oynaticimizi hazirlayabiliriz. Ilk olarak Visual Studio 2008’i açip bir silverlight Projesi baslatalim. (Ilk kez silverlight ile ilgili bir seyler yapiyorsak önce burayi okumanizi tavsiye ederim.)Projemizi açtiktan sonra Blend aracina gidelim. Projemizi blende ile açmak için, page.xaml (default xaml sayfamizi degistirdiysek onun) üzerinde sag click yaparak Open in Expression Blend’e tiklayalim. Sayfamizda bulunan Grid’e 2 Row tanimlayalim. 1. Rowda videomuzu görüntüleyecegimiz media elementi yer alacak. 2. Rowda da 4 tane buton ve sesi degistirebilmemiz için slider kontrolü yer alacak, anlik bufferingi ve donwload miktarini da görebilmek için 2 tane textbox ekleyelim. Her kontrole yapacagi ise göre bir isim verelim. (Kontroller default olarak bir isim almiyor) Videomuz için olusan XAML kodu asagidaki gibi oldu.<UserControlx:Class="VideoKontrol.Page" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc=http://schemas.openxmlformats.org/markup-compatibility/2006> <Gridx:Name="LayoutRoot" Background="White" MinWidth="400"MinHeight="300"> <Grid.RowDefinitions> <RowDefinitionHeight="*"/> <RowDefinitionHeight="48"/> </Grid.RowDefinitions>// Grid’i ikiye böldüm. Üstteki row’da video elementi yer alacak. Alttaki rowda da videoyu yönetecegim tuslar yer alacak. <Button HorizontalAlignment="Left"Margin="8,13,0,13" Grid.Row="1"Content="Play" x:Name="btnPlay"/> // Videoyu oynatacak buton <Button HorizontalAlignment="Left"Margin="83,13,0,13" Content="Stop"Grid.Row="1"x:Name="btnStop"/> // Videoyu durduracak buton <ButtonHorizontalAlignment="Left"Margin="41,13,0,13"Content="Pause"Grid.Row="1" x:Name="btnPause"/> // Videoyu duraklatacak olan buton <Slider Margin="125,15,170,15"Grid.Row="1"Maximum="1"Value="1" x:Name="sldSes"/> // Videonun sesini ayarlayacak olan slider kontrolü <MediaElement Height="Auto"Grid.Row="0"HorizontalAlignment="Left"VerticalAlignment="Top" Width="Auto" Volume="1" x:Name="video"/> // Videomuzu gösterecek olan media kontrolü. <Button HorizontalAlignment="Left"Margin="319,11,0,15"Grid.Row="1"Content="Full ekran"Width="75" x:Name="btnFull"/> // Uygulamayi full ekran’da göstermek için kullanacagimiz buton. <TextBox HorizontalAlignment="Right " Margin="0,12,88,9" Width="33" Grid.Row="1" Text="" TextWrapping="Wrap" x:Name="txtBuffer"/> // Bufering degerini gösterecek textbox <TextBox HorizontalAlignment="Right" Margin="0,12,126,9" x:Name="txtDownload" Width="33" Text="" TextWrapping="Wrap" Grid.Row="1"/> // Download oranini gösterecek olan textbox </Grid></UserControl>Video oynatici için tasarimi bitirdikten sonra artik video oynatici üzerindeki kontrollerin çalismasini saglayacak kodlari yazalim. Bunun için visual studio 2008’e geçelim ve page.xaml.cs kod dosyasini açalim. Burada default olarak olusan bir event yok. Bunun için ilk olarak uygulama yüklendiginde çalisacak olan event’i olusturalim (Loaded eventi). Bu event içinde de media kontrolünde gösterilecek olan video dosyasini belirtelim.public Page(){ InitializeComponent(); this.Loaded += new RoutedEventHandler(Page_Loaded);}void Page_Loaded(object sender, RoutedEventArgs e){ video.Source = new Uri("http://www.semgoksu.com/images/video.wmv"); // Oynatilacak olan videonun pathi.}Ayni sekilde diger kontroller içinde eventleri olusturalim. public Page(){ InitializeComponent(); this.Loaded += new RoutedEventHandler(Page_Loaded); btnPlay.Click += new RoutedEventHandler(btnPlay_Click); btnPause.Click += new RoutedEventHandler(btnPause_Click); btnStop.Click += new RoutedEventHandler(btnStop_Click); btnFull.Click += new RoutedEventHandler(btnFull_Click); sldSes.ValueChanged += new RoutedPropertyChangedEventHandler<double>(sldSes_ValueChanged); video.BufferingProgressChanged += new RoutedEventHandler(video_BufferingProgressChanged); video.DownloadProgressChanged += new RoutedEventHandler(video_DownloadProgressChanged);} void video_DownloadProgressChanged(object sender, RoutedEventArgs e){ txtDownload.Text = (video.DownloadProgress * 100).ToString(); // Download oranini yüzde cinsinden gösterebilmek için media elementinin DonwloadProgress özelligini 100 ile çarptim. Download Progress o anki download oranini veriyor.} void video_BufferingProgressChanged(object sender, RoutedEventArgs e){ txtBuffer.Text = (video.BufferingProgress * 100).ToString();// Buffer (Önbellekleme) oranini yüzde cinsinden gösterebilmek için media elementinin BufferingProgress özelligini 100 ile çarptim. BufferingProgress özelligi o anki önbellekleme oranini gösteriyor.} void sldSes_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) { video.Volume = sldSes.Value; // Sliderin degerine göre ses ayari da degisir.} void btnFull_Click(object sender, RoutedEventArgs e){ Application.Current.Host.Content.IsFullScreen = true; // Uygulamamizi tam ekran moduna getirir.} void btnStop_Click(object sender, RoutedEventArgs e){ video.Stop(); // Videoyu durdurur.} void btnPause_Click(object sender, RoutedEventArgs e){ video.Pause(); // Videoyu duraklatir.}void btnPlay_Click(object sender, RoutedEventArgs e){ video.Play(); // Videoyu oynatir.}Video oynaticimiz hazir. Test edelim,Işte bu kadar :)Bu makalenin de sonuna geldik, başka bir makalede görüşmek üzere. .NET ve Silverlight ile kalin ;) Kaynak kodları indirmek için tiklayinizSem GÖKSU www.semgoksu.com | www.yazilimgunlugu.com sem.goksu@yazilimgunlugu.com Kaynaklarmsdn.comsilverlight.netdaron.yondem.com
19 Oca 2009 Silverlight Layout Kontrolleri Kategori: Silverlight Etiketler: SilverlightSilverlight 4 2 Yorum Merhaba arkadaslar, bu makalemizde silverlight uygulamalarinda kullanilan Layout kontrollerini (StackPanel, Grid, Canvas) inceliyor olacagiz.Layout Kontrolü Nedir?Layout kontrolleri silverlight uygulamalarinda yer alacak kontrollerimizin uygulama üzerinde nerede, nasil duracagini ve bu kontrollerin ekranda nasil gösterilecegini belirleyen kontrollerdir. Bu kontroller kullanicinin tarayicisina göre yeniden boyutlandirilabilir yada sabit bir sekilde tarayici üzerinde gösterilebilirler. Yine ayni sekilde layout kontrolleri içerisinde yer alan diger kontroller de içinde bulundugu kontrole göre boyutlandirilabilir yada sabit bir sekilde gösterilebilirler. Silverlight içerisinde kullanabilecegimiz 3 adet layout kontrolü var, StackPanel, Grid ve Canvas kontrolleri.Bu üç kontrol de abstract bir sinif olan Panel sinifindan türemislerdir. Istersek Panel sinifini inherit ederek kendi panel kontrolümüzü de yazabiliriz.publicclass StackPanel : Panelpublic class Grid : Panelpublic class Canvas : PanelÜç layout kontrolüde UIElementCollection tipinde Children isimli bir koleksiyona sahiptirler. Bu sayede bu koleksiyonun içerisine istedigimiz kadar UIElement tipinde kontrol ekleyebiliriz. StackPanel stackpanel = new StackPanel();Grid grid = new Grid();Canvas canvas = new Canvas();stackpanel.Children.Add(grid);grid.Children.Add(canvas);canvas.Children.Add(UIElementControl);StackPanelStackPanel genel olarak içerisinde yer alacak kontrollerin belli bir düzende(dikey,yatay) dizilmesi istendiginde tercih edilir. Örnegin bir sayfalama kontrolü yapmak istedigimiz de stack panel içersinde butonlar atarak bu butonlarin stack panel içerisinde yan yana siralanmasini saglayabiliriz. (Yan yana dedik ama StackPanel içerisindeki kontrolleri alt alta da dizebiliriz) StackPanel’in Orientation özelligini degistirerek içerisinde yer alan kontrollerin dikey ya da yatay olarak dizilmesini saglayabiliriz. Orientation özelligi vertical ve horizontal degerleri alabilmektedir.ÖrneginOlusturdugumuz XAML kodunu inceleyecek olursak,<UserControl x:Class="_00_MerhabaSilverlight.Page" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="518" Height="50" Background="#FFF41313" x:Name="UserControl" HorizontalAlignment="Right"><StackPanelBackground="#FFFFFFFF" Orientation="Horizontal"><Button Content="1"/><Button Content="2" RenderTransformOrigin="2.977,0.5"/><Button Content="3"/><Button Content="4"/><Button Content="5"/><Button Content="Sonraki >>"/><Button Content="En Son >>"/></StackPanel></UserControl>Not: Bir User Control içerisinde sadece bir root elementi bulunabilir. Bununda nedeni UserControl nesnesi içerisine sadece tek bir content alabiliyor olmasindandir. Asagidaki gibi bir kullanim geçersizdir.GridGrid kontrolü HTML’de kullandigimiz tablo yapisina benzer fakat etiket yapisi farklidir. Grid içerisinde sütunlar ve satirlar olusturup içerisine diger kontrolleri yerlestirebiliriz. Grid kontrolü bagli bulundugu UserControl’e göre hareket edebilirlerken istersek sabit genislikte de verilebilir.XAML koduna bakacak olursak…<Gridx:Name="LayoutRoot"Background="White"> <Grid.RowDefinitions> <RowDefinition Height="0.223*"/> // Sabit deger yerine Auto vererek yüksekligin otomatik olarak degistirilmesini saglayabiliriz. <RowDefinition Height="0.777*"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="0.245*"/> <ColumnDefinition Width="0.755*"/> // Sabit deger yerine Auto vererek genisligin otomatik olarak degistirilmesini saglayabiliriz. </Grid.ColumnDefinitions> <Rectangle Fill="#FF9C0000" Stroke="#FF000000" Grid.Column="0" Grid.Row="0"/> </Grid>Grid nesnesinin 0 Index numarali Kolonuna ve 0 Index numarali Satirina bir Rectangle nesnesi ekledik. Rectangle nesnesinin özelliklerini asagidaki gibi degistirdigimizde rectangle nesnesinin yerinin degistigini görebiliriz.<Rectangle Fill="#FF9C0000" Stroke="#FF000000" Grid.Column="1" Grid.Row="1"/> CanvasCanvas kontrolü HTML’deki DIV’in position absolute haline benzer yapida bir layout kontrolüdür. Canvas içerisinde yer alacak kontroller Canvas.Left and Canvas.Top (üstten ve soldan mesafeleri) özellikleri belirtilerek canvas kontrolü içerisinde pozisyonyanldirilir. Canvas kontrolünün boyutu degistiginde içerisinde yer alan kontrollerin boyutu degismez. <Canvas Background="#FF0E0C2E"><Rectangle Height="200" Width="200" Fill="#FFC1D039" Stroke="#FF000000" Canvas.Top="25" Canvas.Left="35" RadiusX="20" RadiusY="20"/></Canvas>Yukaridaki örnekte Canvas kontrolü içerisinde bir rectangle nesesi yerlestirdik. Rectangle nesnesi 25px soldan 35px üstten Canvas’in sol üst merkezinden uzaklasmis durumda. Canvasin boyutunu degistirirsek rectangle nesnesinin yerinin degismedigini görebiliriz. <Canvas Background="#FF0E0C2E" Width="600" Height="500"><RectangleHeight="200" Width="200" Fill="#FFC1D039" Stroke="#FF000000" Canvas.Top="25" Canvas.Left="35" RadiusX="20" RadiusY="20"/></Canvas>StackPanel ve Grid içerisine yerlestirilen bir nesne istenirse içerisinde bulundugu nesnenin boyutlarina göre boyutlandirilabilir. Fakat bu durum Canvas için geçerli degildir. Canvas içerisinde yer alan bir nesne her zaman Canvasin Left ve top adindaki dependency özelliklerine göre yerlestirilir, boyutu degismez.Bu makalenin sonuna geldik, baska bir makalede görüsmek dilegiyle. .NET ve Silverlight ile kalin ;)Sem GÖKSU www.semgoksu.com | www.yazilimgunlugu.com sem.goksu@yazilimgunlugu.com Kaynaklarmsdn.comsilverlight.netdaron.yondem.com