Windows 8 Store Uygulama Geliştirme | Detaylarıyla MessageDialog Kullanımı

bir 05 Şubat 2013Windows 8 Kodlar

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.

Screenshot_14

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.

Screenshot_15

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.

Screenshot_15

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 🙂

Screenshot_16

Screenshot_18

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

Yeni makalelerde görüşmek üzere, teşekkürler.

Etiketler:

"Windows 8 Store Uygulama Geliştirme | Detaylarıyla MessageDialog Kullanımı" yazısı için bir yorum yapılmış.

  1. Mustafa dedi ki:

    Teşekkürler, güzel bir makale olmuş. Ne yazık ki internet üzerinden Windows 8 Mağaza derslerine çok sık rastlamadım. Bu yüzden sizden daha fazla dersler bekliyorum.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir