Als ich das erste Mal eine Toast Notification unter Windows 8 verwenden wollte, war ich doch ein wenig verdutzt. Der gesamte Vorgang wirkte auf mich etwas eigenartig, da er sich sehr von dem unterscheidet was man sonst so von WPF und Co. gewöhnt ist. Sehen wir uns aber einfach mal an wie man vorgehen kann.

Der erste Schritt den man gehen muss ist die Erstellung eines Notifiers. Hier ist alles noch wie gewohnt, dank Factory-Methode CreateToastNotifier.


var toastNotifier = ToastNotificationManager.CreateToastNotifier();

Im nächsten Schritt hat man zwar auch eine Factory-Methode, deren Ergebnis wirkt aber etwas ungewohnt. Denn statt einem Objekt, erhält man eine XML-Struktur.


var content = ToastNotificationManager.GetTemplateContent(type);

Der Typ den man hierbei übergibt bestimmt später das Aussehen des Toasts. So kann man angeben ob man ein Bild anzeigen möchte oder ob beispielsweise die erste Zeile des Textes fetgedruckt sein soll, während der Rest der normalen Systemschrift entspricht.

Um nun aber solchen Text zu definieren, muss man sich zunächst aus dem Xml das entsprechende Element extrahieren. Dies geschieht wie folgt.


var toastTextElements = content.GetElementsByTagName("text");

Darauf basierend kann nun der Text gesetzt werden. für die erste Zeile sähe das bspw. wie folgt aus.


toastTextElements[0].AppendChild(content.CreateTextNode(text));

Will man noch ein Bild hinterlegen, folgt man im Grunde dem gleichen Weg mit leicht geänderten Parametern. Wichtig ist hierbei, dass man nicht das Bild angeben kann, sondern nur den Pfad zu diesem.


var toastImageAttributes = content.GetElementsByTagName("image");
((XmlElement) toastImageAttributes[0]).SetAttribute("src", imageSource);

Anschließend muss man aus dem Ganzen noch die eigentliche Notification machen und jene per Notifier anzeigen.


var notification = new ToastNotification(content);
toastNotifier.Show(notification);

Abschließend noch die ganze Methode, mit der man sich etwas Arbeit sparen kann.

public void Notify(ToastTemplateType type, string imageSource, params string[] text)
{
   var toastNotifier = ToastNotificationManager.CreateToastNotifier();

   // add text
   var content = ToastNotificationManager.GetTemplateContent(type);
   var toastTextElements = content.GetElementsByTagName("text");

   if (text.Length > 3)
   {
      throw new ArgumentOutOfRangeException("text", "Only 3 lines of text are allowed.");
   }

   for (var i = 0; i < text.Length; i++)
   {
      toastTextElements[i].AppendChild(content.CreateTextNode(text[i]));
   }

   // add image
   if (!string.IsNullOrEmpty(imageSource))
   {
      var toastImageAttributes = content.GetElementsByTagName("image"); 
      ((XmlElement) toastImageAttributes[0]).SetAttribute("src", imageSource);
   }

   var notification = new ToastNotification(content);
   toastNotifier.Show(notification);
}

Ganz fertig sind wir noch nicht, denn uns fehlt noch eine Einstellung um unsere Toasts auch wirklich anzeigen zu können. Dazu muss die appxmanifest geöffnet werden und gleich unter dem ersten Reiter „Application“ unter „Notification“ „Toast capable“ auf „Yes“ gesetzt werden.


Kick It auf dotnet-kicks.de