Messagedialog | Engin Polat\'ın Windows 8 , Windows Phone 8 ve C# içerikli programcılık sitesi

Arşiv

Etiketlenen yazılar messagedialog

Universal App ekran çözünürlüğünü bulmak

05 July 2014 Yorum yapılmamış

Windows Store ve Windows Phone için tek bir uygulama geliştiriyorsunuz (Universal App) ve uygulamanın çalıştığı cihazın ekran çözünürlüğünü bulmanız gerekiyor.

Öncelikle Windows.Graphics.Display namespace‘inde yeralan DisplayInformation sınıfının RawPixelsPerViewPixel property‘sinin değerini okuyalım;

var rawPixelPerView = DisplayInformation.GetForCurrentView().RawPixelsPerViewPixel;

Şimdi ekran genişliği ve yüksekliği bilgilerini okuyarak yukarıda bulduğumuz değişken ile çarparak ekran çözünürlüğünü hesaplayabiliriz;

var width = Window.Current.Bounds.Width * rawPixelPerView;
var height = Window.Current.Bounds.Height * rawPixelPerView;

Hesapladığımız ekran çözünürlüğünü bir MessageDialog aracılığı ile kullanıcıya göstermek için ShowAsync() methodunu kullanıyoruz;

var dialog = new MessageDialog(string.Format("Çözünürlük: {0} * {1}", width, height);
dialog.ShowAsync();

Windows 8 Uygulamalarda Toast Notification Kullanımı

13 December 2012 1 yorum

Windows 8 uygulaması geliştirirken kullanıcıyı bilgilendirmek isteyebiliriz. Kullanıcıya sadece bilgi vermek için MessageDialog kullanmak doğru olmayacaktır, kullanıcı bir süre sonra rahatsızlık duymaya başlayacak ve belkide uygulamayı kullanmaktan vazgeçecektir.

Kullanıcıyı bilgilendirmenin daha doğru yolu Toast Notification sistemini kullanmaktır.

Toast Notification sistemini kullanırken dikkat etmemiz gereken ToastTemplateType enum yapısıdır.

MSDN‘de yer alan ToastTemplateType enumeration sayfasından hangi tiplerde toast notification gösterebileceğinizi öğrenebilirsiniz.

using kısmına

Windows.UI.Notifications

eklemeliyiz. Örnek kullanım;

public static void ShowNotification(string Title, string Message)
{
	const ToastTemplateType template = ToastTemplateType.ToastText02;
	var toastXml = ToastNotificationManager.GetTemplateContent(template);

	var toastText = toastXml.GetElementsByTagName("text");
	toastText[0].AppendChild(toastXml.CreateTextNode(Title));
	toastText[1].AppendChild(toastXml.CreateTextNode(Message));

	var toast = new ToastNotification(toastXml);

	var toastNotifier = ToastNotificationManager.CreateToastNotifier();
	toastNotifier.Show(toast);
}

public static void ShowNotification(string Title, string Message, string ImageFileName)
{
	const ToastTemplateType template = ToastTemplateType.ToastImageAndText01;
	var toastXml = ToastNotificationManager.GetTemplateContent(template);

	var toastText = toastXml.GetElementsByTagName("text");
	toastText[0].AppendChild(toastXml.CreateTextNode(Title));
	toastText[1].AppendChild(toastXml.CreateTextNode(Message));

	var toastImage = toastXml.GetElementsByTagName("image");
	toastImage.SetAttribute("src", ImageFileName);

	var toast = new ToastNotification(toastXml);

	var toastNotifier = ToastNotificationManager.CreateToastNotifier();
	toastNotifier.Show(toast);
}

Hatta Toast Notification gösterimi esnasında uyarı sesi bile çaldırabiliriz. Bunu yapmak için audio elementini kullanacağız. Sistemde kayıtlı uyarı sesleri;

  • ms-winsoundevent:Notification.Default
  • ms-winsoundevent:Notification.IM
  • ms-winsoundevent:Notification.Mail
  • ms-winsoundevent:Notification.Reminder
  • ms-winsoundevent:Notification.SMS
  • ms-winsoundevent:Notification.Looping.Alarm
  • ms-winsoundevent:Notification.Looping.Alarm2
  • ms-winsoundevent:Notification.Looping.Call
  • ms-winsoundevent:Notification.Looping.Call2

Örnek kullanım;

public static void ShowNotification(string Title, string Message, string ImageFileName, string SoundName)
{
	const ToastTemplateType template = ToastTemplateType.ToastImageAndText01;
	var toastXml = ToastNotificationManager.GetTemplateContent(template);

	var toastText = toastXml.GetElementsByTagName("text");
	toastText[0].AppendChild(toastXml.CreateTextNode(Title));
	toastText[1].AppendChild(toastXml.CreateTextNode(Message));

	var toastImage = toastXml.GetElementsByTagName("image");
	toastImage.SetAttribute("src", ImageFileName);

	var toastAudio = toastXml.GetElementsByTagName("audio");
	toastAudio.SetAttribute("src", SoundName);

	var toast = new ToastNotification(toastXml);

	var toastNotifier = ToastNotificationManager.CreateToastNotifier();
	toastNotifier.Show(toast);
}

Son olarak, yukarıdaki kodların çalışması için uygulamanın Package.appxmanifest dosyasında Toast Capable seçeneğine Yes değerini vermeyi unutmamalıyız

Windows 8 Uygulamalarında MessageBox yerine MessageDialog Sınıfının Kullanımı

23 November 2011 1 yorum

Geliştirdiğimiz uygulamalarda kullanıcıyı bilgilendirmek ve/veya yönlendirmek için Mesaj Kutularını (MessageBox) kullanırız.

Metro Style uygulamalar, System.Windows.Forms namespace’inde yeralan MessageBox sınıfına erişemezler. MessageBox sınıfı yerine MessageDialog sınıfını kullanarak kullanıcıya bilgilendirme kutusu gösterebilirler.

MessageDialog sınıfının constructor‘ı iki parametre alır;

  • content (string) : Kullanıcıya göstermek istediğimiz mesaj
  • title (string) : Mesaj kutusunun başlığı

Hemen yeni bir Visual Studio 2011 açarak örnek proje üzerinde geliştirmeye başlayalım;

Yeni Proje oluşturma dialog kutusunda Windows Metro Style grubunda yer alan Application proje şablonunu seçelim ve projemize bir isim verelim (bu örnekte benim kullandığım isim, MessageBoxOrnek)

Proje oluşturulduğunda MainPage.xaml dosyasının içeriği;

<UserControl x:Class="Windows8ApplicationBar.MainPage"
	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
	xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
	xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
	mc:Ignorable="d"
	d:DesignHeight="768" d:DesignWidth="1366">

	<Grid x:Name="LayoutRoot" Background="#FF0C0C0C">
	</Grid>

</UserControl>

Öncelikle uygulamamızın arkaplan rengini değiştirmek için Grid element’inin Background özelliğine Maroon değerini atayalım;

<UserControl x:Class="Windows8ApplicationBar.MainPage"
	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
	xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
	xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
	mc:Ignorable="d"
	d:DesignHeight="768" d:DesignWidth="1366">

	<Grid x:Name="LayoutRoot" Background="Maroon">
	</Grid>

</UserControl>

Grid element’inin içerisine bir adet Button elementi oluşturalım ve Click olayını bir method’a yönlendirelim;

<Button x:Name="btnMesaj" HorizontalAlignment="Center" VerticalAlignment="Center" Content="Karşıla" Click="btnMesaj_Click" />

Böylece MainPage.xaml dosyasının XAML kod’u aşağıdaki hale gelmiş oluyor;

<UserControl x:Class="MessageBoxOrnek.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="768" d:DesignWidth="1366">
    
    <Grid x:Name="LayoutRoot" Background="Maroon">

        <Button x:Name="btnMesaj" HorizontalAlignment="Center" VerticalAlignment="Center" Content="Karşıla" Click="btnMesaj_Click" />
        
    </Grid>
    
</UserControl>

MainPage.xaml.cs dosyasında btnMesaj_Click method’unu yazıyoruz;

private async void btnMesaj_Click(object sender, RoutedEventArgs e)
{
	MessageDialog dialog = new MessageDialog("Merhaba, uygulamamıza hoşgeldiniz...", "Sayın Kullanıcı");

	await dialog.ShowAsync();
}

MessageDialog sınıfı Windows.UI.Popups namespace’inde yer aldığı için, dosyanın using kısmına,

using Windows.UI.Popups;

satırını eklememiz gerekiyor.

Böylece, uygulamayı çalıştırdıktan ekranın ortasında gördüğümüz butona tıkladığımızda, aşağıdaki gibi bir Mesaj Kutusu ekranda belirecektir;

Gösterilen MessageDialog sadece Kapat (Close) butonuna sahiptir. Eğer Close butonu yerine kendi butonlarımızı kullanmak istersek, dialog değişkeninin Commands özelliğine IUICommand interface’ini implemente eden sınıfların birinden yeni bir instance eklememiz gerekir (Örneğin UICommand sınıfı).

Not : MessageDialog Commands özelliğine en fazla 3 adet buton ekleyebiliriz.

Yukarıdaki örnekte gösterdiğimiz MessageDialog‘a Yoksay, Kapat, Tümünü Kapat butonları ekleyelim, btnMesaj_Click method’unu aşağıdaki gibi değiştiriyoruz;

private async void btnMesaj_Click(object sender, RoutedEventArgs e)
	{
	MessageDialog dialog = new MessageDialog("Merhaba, uygulamamıza hoşgeldiniz...", "Sayın Kullanıcı");

	dialog.Commands.Add(new UICommand("Yoksay", (command) =>
	{
		/// yoksayıldı
	}));

	dialog.Commands.Add(new UICommand("Kapat", (command) =>
	{
		/// kapatıldı
	}));

	dialog.Commands.Add(new UICommand("Tümünü Kapat", (command) =>
	{
		/// tümü kapatıldı
	}));

	await dialog.ShowAsync();
}