2014-04-24 13 views
11

Okay, ich verwende den neuen ToastNotificationManager in meinem 8.1 SL-Projekt anstelle des alten ShellToast. Der ShellToast hatte NavigationUri auf der Toast-Nachricht, was es wirklich einfach machte.Toast Benachrichtigungsparameter in Windows Phone 8.1 Silverlight

In den neuen Toasts müssen Sie die Startparameter selbst nach this Artikel angeben. Jedoch scheint es, wie 8.1 SL nicht das Ereignis OnLaunched (LaunchActivatedEventArgs args) hat Sie sollen für die Parameter in App.xaml.cs hören:

Schritt 2: die „OnLaunched“ App-Griff Ereignis

Wenn der Benutzer auf Ihren Toast klickt oder durch Berühren auswählt, wird die zugehörige App gestartet und das OnLaunched-Ereignis ausgelöst.

Hinweis Wenn Sie in Ihrem Toast keine Startattributszeichenfolge einschließen und Ihre App bereits ausgeführt wird, wenn der Toast ausgewählt ist, wird das OnLaunched-Ereignis nicht ausgelöst.

Dieses Beispiel zeigt die Syntax für das Überschreiben des OnLaunched-Ereignisses , in dem Sie die durch die Toast-Benachrichtigung bereitgestellte Startzeichenfolge abrufen und entsprechend handeln.

protected override void OnLaunched(LaunchActivatedEventArgs args) 
{ 
    string launchString = args.Arguments 

    .... 
} 

Mein Code:

// Using the ToastText02 toast template. 
ToastTemplateType toastTemplate = ToastTemplateType.ToastText02; 

// Retrieve the content part of the toast so we can change the text. 
XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(toastTemplate); 

//Find the text component of the content 
XmlNodeList toastTextElements = toastXml.GetElementsByTagName("text"); 

// Set the text on the toast. 
// The first line of text in the ToastText02 template is treated as header text, and will be bold. 
toastTextElements[0].AppendChild(toastXml.CreateTextNode("Heading")); 
toastTextElements[1].AppendChild(toastXml.CreateTextNode("Body")); 

// Set the duration on the toast 
IXmlNode toastNode = toastXml.SelectSingleNode("/toast"); 
((XmlElement)toastNode).SetAttribute("duration", "long"); 

//Launch params 
string paramString = "{\"type\":\"toast\",\"param1\":\"12345\"}"; 
((XmlElement)toastXml.SelectSingleNode("/toast")).SetAttribute("launch", paramString); 

// Create the actual toast object using this toast specification. 
ToastNotification toast = new ToastNotification(toastXml); 

// Set SuppressPopup = true on the toast in order to send it directly to action center without 
// producing a popup on the user's phone. 
toast.SuppressPopup = true; 

// Send the toast. 
ToastNotificationManager.CreateToastNotifier().Show(toast); 

Wer weiß, wie diese zu lösen? Danke

+0

Sie können den Toast direkt mit einem Navigationsparameter versehen. Ich werde die Details bekommen, wenn ich morgen wieder zur Arbeit komme. Seltsamerweise haben wir das nicht richtig dokumentiert. –

+0

Danke freuen uns darauf! :) – robertk

+0

Wenn Sie den ToastNotificationManager in Silverlight 8.1 verwenden, was verwenden Sie anstelle des OnLoaded-Ereignisses, da SL das nicht in der App.xaml hat? Ich habe es in der OnNavigatedTo, aber es scheint zweimal zu nennen, wenn der Toast angeklickt wird Ich verwende die Antwort für den Load-Trigger unten. – gcoleman0828

Antwort

10

Ihr Problem ist, dass Sie den falschen launch Parameter einstellen. Sie sollten es direkt auf die Seite setzen, zu der Sie navigieren möchten.

var toastNavigationUriString = ""#/MainPage.xaml?param1=12345"; 
var toastElement = ((XmlElement)toastXml.SelectSingleNode("/toast")); 
toastElement.SetAttribute("launch", toastNavigationUriString); 
+0

Das hat wirklich gut funktioniert, danke! – robertk

+1

Wo müssen Sie die Methode 'protected override void OnLaunched (LaunchActivatedEventArgs args)' in der WP 8.1 SilverLight App definieren? (In App.xaml.cs wird keine Methode zum Überschreiben angegeben.) –

+3

@ShishirGupta Diese Methode wird nicht ausschließlich für Universal Apps verwendet. Für Silverlight 8.1, übergeben Sie es einfach eine vollständige uri, direkt auf die Seite, die Sie eingeben möchten, wie in meinem Beispiel. –

Verwandte Themen