Silverlight 5 Beta ile masaüstünde birden çok pencere!

0 dakikada yazıldı

8035 defa okundu

Düzenle

Ufaktan ufaktan Silverlight 5 dünyasına girdiğimiz bu günlerde Silverlight'ın masaüstündeki gücünü arttıran güzel bir yenilikten bahsetmek istiyorum. Malum Silverlight uzun süredir "Out-Of-Browser" moduna da alınabiliyor. Silverlight'ın desktop uygulamalarla yarıştığı noktada sürekli karşımıza çıkan ihtiyaçlardan biri uygulama içerisinde birden çok pencereye sahip olabilmek ve bu pencereleri yönetebilmekti. Silverlight 5 Beta ile beraber bu sorun da çözülüyor, hem de çok kolay kullanışlı basit bir mekanizma ile....

Bir Silverlight uygulamasında birçok pencere...

Örnek koda bakmadan önce hemen bir uyarıda buluniyim. Bir uygulama içerisinde birden çok pencere sahibi olabilmeniz için uygulamanın "Elevated Trust" modunda çalıştırılmış olması gerekiyor. Aynı şekilde Silverlight uygulaması tarayıcı içerisindeyken maalesef tarayıcı dışında yeni pencereler de yaratamıyor. Şartımız uygulamanın Elevated-Trust ve Out-Of-Browser modunda olması.

Birden çok ekran için hazırlıklarımızı
yapıyoruz...Birden çok ekran için hazırlıklarımızı yapıyoruz...

Birden çok ekrana sahip olabilmek için öncesinde tabi ki o ekranlarda gösterecek birşeylere ihtiyacımız var. Sıfırdan bir Silverlight uygulaması yarattığımızda zaten RootVisual olarak set edilmiş bir UserControl projeye eklenmiş oluyor. Ek olarak ikinci bir pencere açacaksan o pencerenin içindeki gösterilecek içeriği de bir UserControl olara projemize ekliyoruz. Yukarıdaki ekran görüntüsünde basit iki UserControl ve içlerinde birer basit TextBlock göreceksiniz. Şimdi Ekran2.xaml olarak eklediğimiz UserControl'ü ayrı bir pencerede açmak için MainPage.xaml'ın içine bir düğme ekleyerek aşağıdaki kodu yazıyoruz.

* [C#]*

    public partial class MainPage : UserControl\     {\         public MainPage()\         {\             InitializeComponent();\             button1.Click += new RoutedEventHandler(button1_Click);\         }\ \         void button1_Click(object sender, RoutedEventArgs e)\         {\             Window YeniPencere = new Window();\             YeniPencere.Width = 600;\             YeniPencere.Height = 400;\             YeniPencere.Title = "Ekran 2 Karşınızda!";\             YeniPencere.Content = new Ekran2();\             YeniPencere.Visibility = Visibility.Visible;\         }\     }

Button1'in Click kodunda da görebileceğiniz üzere Window adındaki sınıftan bir kopya alarak Property'lerini sırası ile set ediyoruz. Yükseklik ve genişlikten sonra pencere için de bir başlık verdiğimiz sıra geliyor pencerenin içerisinde gösterilecek ana UIElemenet'e. Daha önce projemiz eklediğimiz Ekran2 adındaki UserControl'ü bu pencereye Content olarak atıyoruz. Pencereyi ekrana getirmek için son adımda ise Visibility özelliğini Visible olarak değiştiriyoruz. Artık bu şekilde istediğiniz kadar pencereler yaratabilirsiniz.

Pencerelerimiz
sahnede...Pencerelerimiz sahnede...

Peki pencerelere sonradan ulaşmak istersek nasıl ulaşacağız?

Tüm uygulamada yaratılan pencereler Application.Current altında Windows adında bir kolleksiyonda tutuluyor. Bu kolleksiyona ulaşarak istediğiniz pencereye, içeriğine ulaşabilir ve her türlü işlemi yapabilirsiniz. Aşağıdaki kodu uygulamamızın ana ekranına eklersek ana ekran dışında tüm diğer ekranları kapatabilecek bir yapı elde etmiş oluyoruz.

[C#]

            foreach (Window Pencere in Application.Current.Windows)\             {\                 if (Pencere != Application.Current.MainWindow)\                 {\                     Pencere.Close();\                 }\             }

Son olarak unutmayın ki yarattığınız her Window nesnesinin WindowStyle özelliğini None yaparak pencerelerin etrafındaki işletim sistemi çerçevesinin (Chrome) gözükmemesini sağlayabilir, böylece Silverlight 4'te de olduğu gibi her pencere için ayrı ayrı çerçeveler tasarlayabilirsiniz. Bu konuda yardım almak için Silverlight 4'te desktop (Out-Of-Browser) uygulamalarının pencere tasarımını değiştirmek makalesini inceleyebilirsiniz.