Makale Özeti

Windows 8 ile birlikte yeni bir görünüme kavuşan klasik MessageBox metodumuz, yeni haliyle nasıl kullanılıyor ve nasıl özellikleri var, inceliyoruz.

Makale

 

Bildiğiniz üzere veya öğreneceğiniz üzere, Klasik WinForm, Silverlight, Windows Phone gibi dillerde olanın aksine MessageBox Windows 8 ortamında hayatımızdan çıkmış, yerini kullanım ve görünüm farklılığı olan bir başka özelliğe bırakmış durumda, MessageDialog.

Öncelikle fark nedir ve bu sınıf neden değiştirilmiştir buna değinmek istiyorum. Fark olarak, görsel olarak karşımıza Windows 8 Modern stilini yansıtan bir sonuç çıkıyor. Kullanım olarak ise, klasik .Show(“İçerik”, “Başlık”, ButonÖzelliği) gibi bir kullanım değil, biraz daha dallanıp budaklanmış bir sonuç görüyor olacağız. Neden değiştirildiğini aslında bilmiyorum fakat, gerekli görsellik ve Windows 8 kod yapısına uygun olması için gerekli bir değişiklik olmasaydı 3-4 farklı ortamdaki MessageBox’ı böylesine değişikliğe uğratmazlardı kanımca :)

Gözünüzü korkutmadan (ki korkacak bişey zaten yoktu ya neyse) biraz anlatıma giriyorum. Öncelikle bir MessageDialog tanımlamak için ilk önce bir değişken yaratmalıyız, bunu da şöyle yapıyoruz: 

 

var Mesaj = new MessageDialog("Mesaj kutusu içeriği", "Mesaj Kutusu Başlığı");

veya

MessageDialog Mesaj = new MessageDialog("Mesaj kutusu içeriği", "Mesaj Kutusu Başlığı");

 

Gördüğünüz üzere yukarıdaki iki kod da aynı görevi görüyor. Ancak bu kodu yazmamız, karşımıza bir MessageDialog çıkartmıyor, sadece bu değişkeni bizim için yaratıyor(!) Yani henüz yaratmış olmamız gösteriyor olduğumuz anlamına gelmiyor, göstermek için de bir kod kullanmaktayız, bu kodumuz ise Windows 8 ile başımızın tacı olan Async yapıda bir kod. Bu kod da şöyle oluyor:

 

Mesaj.ShowAsync();

 

Evet, artık yarattığımız Mesaj değişkenini üst kısımdaki kodumuz ile kullanıcıya gösterdik ve kullanıcı güzel tasarıma sahip bir mesaj kutusuyla karşılaştı. Peki, MessageBox ile aradaki fark? Benim gözüme ilk çarpan, MessageBox uygulamalarımızı kilitlerken (örneğin silverlight bir uygulamada arkada bir animasyon veya işlem varsa MessageBox bunları kilitliyordu ekrandan gidene kadar) MessageDialog uygulamamızı kilitlemiyor, yani Async şekilde geliyor ve kendi dışında kimseyi rahatsız etmiyor.

Detaylı kullanıma girecek olursak, size güzel bir örnek hazırladım. Her yönüyle kullanmayı denedim MessageDialog’u.

 

Klasik MessageDialog Kullanımı

 

MessageDialog Mesaj = new MessageDialog("Mesaj kutusu içeriği", "Mesaj Kutusu Başlığı");
Mesaj.ShowAsync();

 

Gördüğünüz gibi yukarıdaki kodumuz ile basit bir mesaj kutusu yaratıp gösteriyoruz.

 

 

Soru Sorma Amaçlı MessageDialog

 

MessageDialog Mesaj = new MessageDialog("Mesaj kutusu içeriği", "Mesaj Kutusu Başlığı");

Mesaj.Commands.Add(new UICommand("Uygula", (command) =>
{
    txtCevap.Text = "Verilen Cevap: Uygula";
}));
Mesaj.Commands.Add(new UICommand("Tamam", (command) =>
{
    txtCevap.Text = "Verilen Cevap: Tamam";
}));
Mesaj.Commands.Add(new UICommand("İptal", (command) =>
{
    txtCevap.Text = "Verilen Cevap: İptal";
}));

Mesaj.DefaultCommandIndex = 0;
Mesaj.ShowAsync();

 

Bu kodumuz da bize 3 ihtimalli bir MessageDialog gösteriyor, buna ek olarak Default seçenek olarak (örneğin enter’a basılırsa) sıfırıncı seçeneği atıyor. Daha sonra da cevabı aldıktan sonra bu cevabı txtCevap objesinin Text özelliğine bu veriyi aktarıyor.

 

 

Soru Sorma Amaçlı MessageDialog 2 

 

var Mesaj = new MessageDialog("Mesaj kutusu içeriği", "Mesaj Kutusu Başlığı");

Mesaj.Commands.Add(new UICommand("Uygula", null, 0));
Mesaj.Commands.Add(new UICommand("Tamam", null, 1));
Mesaj.Commands.Add(new UICommand("İptal", null, 2));

Mesaj.DefaultCommandIndex = 0;

var Seçilen = await Mesaj.ShowAsync();

txtCevap2.Text = "Verilen Cevap: " + Seçilen.Label.ToString();

 

Bu kodumuz aslında bir önceki soru sorma diyaloğundan farklı bir işlem yapmıyor ancak kod yapısı biraz daha farklı. Bunun sebebi ise varolan komut ekleme biçiminin bir farklı kullanımının daha mümkün olması. Burada dikkat etmeniz gereken, yukarıdaki kodu çağırdığınız fonksiyon mutlaka async olmalı. (örneğin, bir butondan çağıracaksanız butonun 

 

private void Button_Click(object sender, RoutedEventArgs e)

 

şeklindeki yapısına async komutunu

 

private async void Button_Click(object sender, RoutedEventArgs e)

 

şeklinde ekleyerek değiştirmelisiniz. Bunu yapmazsanız await komutu çalışmayacak, bunun akabinde de Seçilen.Label komutu kullanılamaz olacaktır.

 

 

 

Gördüğümüz üzere, MessageDialog çok güzel bir kullanım imkanı sunmakta. Hatta, stillerle içli dışlıysanız MessageDialog’da gösterilen komutların renklerini bile değiştirebiliyorsunuz, hatta MSDN’in örneğini inceledim, MessageDialog kullanarak neredeyse her türlü input almanız mümkün olabiliyor! Bana çok karışık geldiği için çok fazla incelemedim, zira yukarıda size aktardığım 20 satırlık C# kodunu XAML ve C# dahil olmak üzere 300-400 satırda yapmışlar, kendimizi çok yormayalım :)

 

 

 

 

 

Örnek kod’u MessageDialogDetaylı linkine tıklayarak indirebilirsiniz, anlattıklarıma ek olarak bir basit özelleştirme yaptığım bir kod da var örnekte.

Kaynak: http://onurtirpan.com/