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 Yorum (2) Sinan BARAN / 19.1.2009 19:45:32 Harika bir makale ellerine saglik abi... ertugrul / 21.12.2009 13:32:12 silverlight ile tanıştığım bu günlerde güzel bir makale okumuş oldum tesekkurler sem Yorum Yaz * Ad Soyad: * Email: * Message:
Yorum (2) Sinan BARAN / 19.1.2009 19:45:32 Harika bir makale ellerine saglik abi... ertugrul / 21.12.2009 13:32:12 silverlight ile tanıştığım bu günlerde güzel bir makale okumuş oldum tesekkurler sem
ertugrul / 21.12.2009 13:32:12 silverlight ile tanıştığım bu günlerde güzel bir makale okumuş oldum tesekkurler sem