2016-05-31 9 views
5

In meiner App möchte ich den Benutzer informieren, wenn eine bestimmte Aktion durchgeführt wurde, wie Datensatz erfolgreich aktualisiert oder neue Datensatz hinzugefügt, aber es gibt keine eingebaute Kontrolle, die solche Informationen anzeigen kann. Gibt es etwas, das Android Toast.makeText für UWP ähnlich ist?So erstellen Sie informative Toast-Benachrichtigung in UWP App

Antwort

13

Ja, hat UWP Toast Benachrichtigungen :)

Hier Beispielcode ist eine einfache Mitteilung anzuzeigen:

private void ShowToastNotification(string title, string stringContent) 
{ 
     ToastNotifier ToastNotifier = ToastNotificationManager.CreateToastNotifier(); 
     Windows.Data.Xml.Dom.XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText02); 
     Windows.Data.Xml.Dom.XmlNodeList toastNodeList = toastXml.GetElementsByTagName("text"); 
     toastNodeList.Item(0).AppendChild(toastXml.CreateTextNode(title)); 
     toastNodeList.Item(1).AppendChild(toastXml.CreateTextNode(stringContent)); 
     Windows.Data.Xml.Dom.IXmlNode toastNode = toastXml.SelectSingleNode("/toast"); 
     Windows.Data.Xml.Dom.XmlElement audio = toastXml.CreateElement("audio"); 
     audio.SetAttribute("src", "ms-winsoundevent:Notification.SMS"); 

     ToastNotification toast = new ToastNotification(toastXml); 
     toast.ExpirationTime = DateTime.Now.AddSeconds(4); 
     ToastNotifier.Show(toast); 
} 

In diesem Artikel finden Sie, wie es gestalten:

https://docs.microsoft.com/en-us/windows/uwp/controls-and-patterns/tiles-and-notifications-adaptive-interactive-toasts

+0

Aber es ist nicht informative Toast-Benachrichtigung, wenn der Benutzer es ignoriert, als es in Benachrichtigungszentrale geht, die ich nicht will. –

+0

Geben Sie unter der Zeile bitte Folgendes ein: toast.ExpirationTime = DateTime.Now.AddSeconds (4); Dies wird eine Benachrichtigung für 4 Sekunden anzeigen und dann auch aus dem Action Center verschwinden. –

+0

Ich habe meine Antwort bearbeitet. –

0

Hier, wie einfache makeText wie Android zu realisieren:

private Windows.UI.Xaml.Controls.Frame frame; 
    private Windows.UI.Xaml.Controls.Page page; 
    private Ribo.Smart.App.UserControls.Components.Common.Toast toast; 

    private DispatcherTimer timer = new DispatcherTimer(); 
    void timer_Tick(object sender, object e) 
    { 
     if (toast != null) 
      ((Panel)page.FindName("layoutRoot")).Children.Remove(toast); 

     toast = null; 

     timer.Stop(); 

     timer.Tick -= timer_Tick; 
    } 
    private void Frame_Navigated(object sender, Windows.UI.Xaml.Navigation.NavigationEventArgs e) 
    { 
     if (toast != null) 
     { 

      object layoutRoot = page.FindName("layoutRoot"); 

      if (layoutRoot != null) 
      { 
       ((Panel)layoutRoot).Children.Remove(toast); 

       page = (Windows.UI.Xaml.Controls.Page)e.Content; 

       layoutRoot = page.FindName("layoutRoot"); 

       ((Panel)layoutRoot).VerticalAlignment = VerticalAlignment.Stretch; 

       ((Panel)layoutRoot).Children.Add(toast); 

       if (layoutRoot is Grid) 
       { 
        toast.SetValue(Grid.RowSpanProperty, 100); 
       } 
      } 
     } 
    } 

    public void ShowMessage(string message) 
    { 

     frame = (Windows.UI.Xaml.Controls.Frame)Windows.UI.Xaml.Window.Current.Content; 
     page = (Windows.UI.Xaml.Controls.Page)frame.Content; 

     frame.Navigated -= Frame_Navigated; 
     frame.Navigated += Frame_Navigated; 

     toast = new Ribo.Smart.App.UserControls.Components.Common.Toast(); 
     toast.Message = message; 
     toast.VerticalAlignment = Windows.UI.Xaml.VerticalAlignment.Bottom; 
     toast.HorizontalAlignment = Windows.UI.Xaml.HorizontalAlignment.Center; 

     int seconds = message.Length/30; 

     if (seconds < 2) 
      seconds = 2; 

     timer.Interval = new TimeSpan(0, 0, seconds); 
     timer.Start(); 
     timer.Tick -= timer_Tick; 
     timer.Tick += timer_Tick; 

     object layoutRoot = page.FindName("layoutRoot"); 

     if (layoutRoot != null) 
     { 
      if (layoutRoot is Grid) 
      { 
       toast.SetValue(Grid.RowSpanProperty, 100); 
      } 

      ((Panel)layoutRoot).Children.Add(toast); 
     } 

    }