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

0 dakikada yazıldı

8124 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.