程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> Windows 8 Store Apps學習(35) 通知: Toast 詳解

Windows 8 Store Apps學習(35) 通知: Toast 詳解

編輯:關於.NET

介紹

重新想象 Windows 8 Store Apps 之 通知

Toast - 基本應用參見 http://www.cnblogs.com/webabcd/archive/2013/06/17/3139740.html

Toast - 純文本 toast

Toast - 圖文 toast

Toast - toast 的提示音

Toast - 按計劃彈出 toast

示例

1、演示純文本 toast 的 4 個模板

Notification/Toast/ToastWithText.xaml

<Page
    x:Class="XamlDemo.Notification.Toast.ToastWithText"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:XamlDemo.Notification.Toast"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">
    
    <Grid Background="Transparent">
        <StackPanel Margin="120 0 0 0">
    
            <TextBox Name="lblMsg" Height="100" TextWrapping="Wrap" AcceptsReturn="True" FontSize="14.667" Margin="0 0 10 0" />
    
            <Button Name="btnTextBodyWrap" Content="TextBodyWrap" Click="btnTextBodyWrap_Click_1" Margin="0 10 0 0" />
    
            <Button Name="bntTextHeadingTextBodyWrap" Content="TextHeading TextBodyWrap" Click="bntTextHeadingTextBodyWrap_Click_1" Margin="0 10 0 0" />
    
            <Button Name="bntTextHeadingWrapTextBody" Content="TextHeadingWrap TextBody" Click="bntTextHeadingWrapTextBody_Click_1" Margin="0 10 0 0" />
    
            <Button Name="bntTextHeadingTextBody" Content="TextHeading TextBody1 TextBody2" Click="bntTextHeadingTextBody_Click_1" Margin="0 10 0 0" />
                
        </StackPanel>
    </Grid>
</Page>

Notification/Toast/ToastWithText.xaml.cs

/*
 * 演示純文本 toast 的 4 個模板
 * 本示例的 Toast 的 XmlDocument 內容構造器采用一個開源項目,具體代碼見:NotificationsExtensions/ToastContent.cs
 * 
 * XmlDocument GetTemplateContent(ToastTemplateType type) - 獲取系統支持的 Toast 模板
 *     ToastTemplateType.ToastText01, ToastTemplateType.ToastText02, ToastTemplateType.ToastText03, ToastTemplateType.ToastText04
 */
    
using NotificationsExtensions.ToastContent;
using Windows.UI.Notifications;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
    
namespace XamlDemo.Notification.Toast
{
    public sealed partial class ToastWithText : Page
    {
        public ToastWithText()
        {
            this.InitializeComponent();
        }
    
        private void btnTextBodyWrap_Click_1(object sender, RoutedEventArgs e)
        {
            IToastText01 templateContent = ToastContentFactory.CreateToastText01();
            templateContent.TextBodyWrap.Text = "我是通知正文,可換行,最多三行。我是通知正文,可換行,最多三行。我是通知正文,可換行,最多三行。";
            IToastNotificationContent toastContent = templateContent;
    
            ToastNotification toast = toastContent.CreateNotification();
            ToastNotificationManager.CreateToastNotifier().Show(toast);
    
            lblMsg.Text = toastContent.GetContent();
        }
    
        private void bntTextHeadingTextBodyWrap_Click_1(object sender, RoutedEventArgs e)
        {
            IToastText02 templateContent = ToastContentFactory.CreateToastText02();
            templateContent.TextHeading.Text = "我是通知標題,不可以換行。我是通知標題,不可以換行。";
            templateContent.TextBodyWrap.Text = "我是通知正文,可換行,最多兩行。我是通知正文,可換行,最多兩行。";
            IToastNotificationContent toastContent = templateContent;
    
            ToastNotification toast = toastContent.CreateNotification();
            ToastNotificationManager.CreateToastNotifier().Show(toast);
    
            lblMsg.Text = toastContent.GetContent();
        }
    
        private void bntTextHeadingWrapTextBody_Click_1(object sender, RoutedEventArgs e)
        {
            IToastText03 templateContent = ToastContentFactory.CreateToastText03();
            templateContent.TextHeadingWrap.Text = "我是通知標題,可換行,最多兩行。我是通知標題,可換行,最多兩行。";
            templateContent.TextBody.Text = "我是通知正文,不可以換行。我是通知正文,不可以換行。";
            IToastNotificationContent toastContent = templateContent;
    
            ToastNotification toast = toastContent.CreateNotification();
            ToastNotificationManager.CreateToastNotifier().Show(toast);
    
            lblMsg.Text = toastContent.GetContent();
        }
    
        private void bntTextHeadingTextBody_Click_1(object sender, RoutedEventArgs e)
        {
            IToastText04 templateContent = ToastContentFactory.CreateToastText04();
            templateContent.TextHeading.Text = "我是通知標題,不可以換行。我是通知標題,不可以換行。";
            templateContent.TextBody1.Text = "我是通知正文1,不可以換行。我是通知正文1,不可以換行。";
            templateContent.TextBody2.Text = "我是通知正文2,不可以換行。我是通知正文2,不可以換行。";
            IToastNotificationContent toastContent = templateContent;
    
            ToastNotification toast = toastContent.CreateNotification();
            ToastNotificationManager.CreateToastNotifier().Show(toast);
    
            lblMsg.Text = toastContent.GetContent();
        }
    }
}

2、演示圖文 toast 的 4 個模板

Notification/Toast/ToastWithImageText.xaml

<Page
    x:Class="XamlDemo.Notification.Toast.ToastWithImageText"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:XamlDemo.Notification.Toast"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">
    
    <Grid Background="Transparent">
        <StackPanel Margin="120 0 0 0">
    
            <TextBox Name="lblMsg" Height="100" TextWrapping="Wrap" AcceptsReturn="True" FontSize="14.667" Margin="0 0 10 0" />
    
            <Button Name="btnTextBodyWrap" Content="TextBodyWrap" Click="btnTextBodyWrap_Click_1" Margin="0 10 0 0" />
    
            <Button Name="bntTextHeadingTextBodyWrap" Content="TextHeading TextBodyWrap" Click="bntTextHeadingTextBodyWrap_Click_1" Margin="0 10 0 0" />
    
            <Button Name="bntTextHeadingWrapTextBody" Content="TextHeadingWrap TextBody" Click="bntTextHeadingWrapTextBody_Click_1" Margin="0 10 0 0" />
    
            <Button Name="bntTextHeadingTextBody" Content="TextHeading TextBody1 TextBody2" Click="bntTextHeadingTextBody_Click_1" Margin="0 10 0 0" />
                
        </StackPanel>
    </Grid>
</Page>

Notification/Toast/ToastWithImageText.xaml.cs

/*
 * 演示圖文 toast 的 4 個模板(注:圖片不能大於 1024*1024 像素,不能大於 200KB)
 * 本示例的 Toast 的 XmlDocument 內容構造器采用一個開源項目,具體代碼見:NotificationsExtensions/ToastContent.cs
 * 
 * XmlDocument GetTemplateContent(ToastTemplateType type) - 獲取系統支持的 Toast 模板
 *     ToastTemplateType.ToastImageAndText01, ToastTemplateType.ToastImageAndText02, ToastTemplateType.ToastImageAndText03, ToastTemplateType.ToastImageAndText04
 *     
 * 注:圖片可以來自程序包內,可以來自 Application Data(僅支持對 local 中圖片文件的引用),可以來自一個 http 的遠程地址
 */
    
using NotificationsExtensions.ToastContent;
using System;
using Windows.UI.Notifications;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
    
namespace XamlDemo.Notification.Toast
{
    public sealed partial class ToastWithImageText : Page
    {
        public ToastWithImageText()
        {
            this.InitializeComponent();
        }
    
        private void btnTextBodyWrap_Click_1(object sender, RoutedEventArgs e)
        {
            IToastImageAndText01 templateContent = ToastContentFactory.CreateToastImageAndText01();
            templateContent.TextBodyWrap.Text = "我是通知正文,可換行,最多三行。我是通知正文,可換行,最多三行。我是通知正文,可換行,最多三行。";
            templateContent.Image.Src = "Assets/Logo.png"; // 用程序包內文件作通知圖片
            templateContent.Image.Alt = "altText";
            IToastNotificationContent toastContent = templateContent;
    
            ToastNotification toast = toastContent.CreateNotification();
            ToastNotificationManager.CreateToastNotifier().Show(toast);
    
            lblMsg.Text = toastContent.GetContent();
        }
    
        private void bntTextHeadingTextBodyWrap_Click_1(object sender, RoutedEventArgs e)
        {
            IToastImageAndText02 templateContent = ToastContentFactory.CreateToastImageAndText02();
            templateContent.TextHeading.Text = "我是通知標題,不可以換行。我是通知標題,不可以換行。";
            templateContent.TextBodyWrap.Text = "我是通知正文,可換行,最多兩行。我是通知正文,可換行,最多兩行。";
            templateContent.Image.Src = "ms-appx:///Assets/Logo.png"; // 用程序包內文件作通知圖片
            templateContent.Image.Alt = "altText";
            IToastNotificationContent toastContent = templateContent;
    
            ToastNotification toast = toastContent.CreateNotification();
            ToastNotificationManager.CreateToastNotifier().Show(toast);
    
            lblMsg.Text = toastContent.GetContent();
        }
    
        private void bntTextHeadingWrapTextBody_Click_1(object sender, RoutedEventArgs e)
        {
            IToastImageAndText03 templateContent = ToastContentFactory.CreateToastImageAndText03();
            templateContent.TextHeadingWrap.Text = "我是通知標題,可換行,最多兩行。我是通知標題,可換行,最多兩行。";
            templateContent.TextBody.Text = "我是通知正文,不可以換行。我是通知正文,不可以換行。";
            templateContent.Image.Src = "ms-appdata:///local/Logo.png"; // 用 Application Data 內文件作通知圖片(注:僅支持 local 中的圖片)
            templateContent.Image.Alt = "altText";
            IToastNotificationContent toastContent = templateContent;
    
            ToastNotification toast = toastContent.CreateNotification();
            ToastNotificationManager.CreateToastNotifier().Show(toast);
    
            lblMsg.Text = toastContent.GetContent();
        }
    
        private void bntTextHeadingTextBody_Click_1(object sender, RoutedEventArgs e)
        {
            IToastImageAndText04 templateContent = ToastContentFactory.CreateToastImageAndText04();
            templateContent.TextHeading.Text = "我是通知標題,不可以換行。我是通知標題,不可以換行。";
            templateContent.TextBody1.Text = "我是通知正文1,不可以換行。我是通知正文1,不可以換行。";
            templateContent.TextBody2.Text = "我是通知正文2,不可以換行。我是通知正文2,不可以換行。";
            templateContent.Image.Src = "http://pic.cnblogs.com/avatar/a14540.jpg?id=24173245"; 

// 用遠程文件作通知圖片
            templateContent.Image.Alt = "altText";
            IToastNotificationContent toastContent = templateContent;
    
            ToastNotification toast = toastContent.CreateNotification();
            ToastNotificationManager.CreateToastNotifier().Show(toast);
    
            lblMsg.Text = toastContent.GetContent();
        }
    }
}

3、演示 Toast 的提示音

Notification/Toast/ToastWithSound.xaml

<Page
    x:Class="XamlDemo.Notification.Toast.ToastWithSound"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:XamlDemo.Notification.Toast"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">
    
    <Grid Background="Transparent">
        <StackPanel Margin="120 0 0 0">
    
            <TextBox Name="lblMsg" Height="100" TextWrapping="Wrap" AcceptsReturn="True" FontSize="14.667" Margin="0 0 10 0" />
    
            <TextBlock Text="通知提示音列表" Margin="0 10 0 0" />
            <ListBox Name="listBox" SelectionChanged="listBox_SelectionChanged_1" Margin="0 10 10 0">
                <ListBoxItem Content="Default" />
                <ListBoxItem Content="Mail" />
                <ListBoxItem Content="SMS" />
                <ListBoxItem Content="IM" />
                <ListBoxItem Content="Reminder" />
                <ListBoxItem Content="LoopingCall" />
                <ListBoxItem Content="LoopingCall2" />
                <ListBoxItem Content="LoopingAlarm" />
                <ListBoxItem Content="LoopingAlarm2" />
                <ListBoxItem Content="Silent" />
            </ListBox>
        </StackPanel>
    </Grid>
</Page>

Notification/Toast/ToastWithSound.xaml.cs

/*
 * 演示 Toast 的提示音
 * 
 * 目前支持的 Toast 提示音共有以下幾種:
 * Default, Mail, SMS, IM, Reminder, LoopingCall, LoopingCall2, LoopingAlarm, LoopingAlarm2, 

Silent
 */
    
using NotificationsExtensions.ToastContent;
using System;
using Windows.UI.Notifications;
using Windows.UI.Xaml.Controls;
    
namespace XamlDemo.Notification.Toast
{
    public sealed partial class ToastWithSound : Page
    {
        public ToastWithSound()
        {
            this.InitializeComponent();
        }
    
        private void listBox_SelectionChanged_1(object sender, SelectionChangedEventArgs e)
        {
            string audioType = (listBox.SelectedItem as ListBoxItem).Content.ToString();
    
            IToastText02 toastContent = ToastContentFactory.CreateToastText02();
            toastContent.TextHeading.Text = "Sound:";
            toastContent.TextBodyWrap.Text = audioType;
            toastContent.Audio.Content = (ToastAudioContent)Enum.Parse(typeof

(ToastAudioContent), audioType);
    
            /*
             * LoopingCall, LoopingCall2, LoopingAlarm, LoopingAlarm2 這 4 種提示音僅針對長時通知,且需指定為循環提示音
             */
            if (audioType == "LoopingCall" || audioType == "LoopingCall2" || audioType == "LoopingAlarm" || audioType == "LoopingAlarm2")
            {
                toastContent.Duration = ToastDuration.Long;
                toastContent.Audio.Loop = true;
            }
                
            ToastNotification toast = toastContent.CreateNotification();
            ToastNotificationManager.CreateToastNotifier().Show(toast);
    
            lblMsg.Text = toastContent.GetContent();
        }
    }
}

4、演示如何按計劃顯示 Toast 通知

Notification/Toast/ScheduledToast.xaml

<Page
    x:Class="XamlDemo.Notification.Toast.ScheduledToast"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:XamlDemo.Notification.Toast"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">
    
    <Grid Background="Transparent">
        <StackPanel Margin="120 0 0 0">
    
            <!--顯示當前 app 的全部 ScheduledToastNotification 對象列表-->
            <ListBox Name="listBox" Width="800" Height="300" HorizontalAlignment="Left">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="{Binding ToastId}" VerticalAlignment="Center" />
                            <TextBlock Text="{Binding Text}" Margin="15 0 0 0" VerticalAlignment="Center" />
                            <HyperlinkButton Name="btnRemove" Content="刪除此 ScheduledToastNotification" Tag="{Binding ToastId}" Margin="15 0 0 0" Click="btnRemove_Click_1" 

/>
                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
    
            <Button Name="btnScheduledToast" Content="ScheduledToastNotification 的 Demo(3 秒後彈出 Toast 通知,然後每隔 60 秒再彈出一次,共重復 5 次)" Click="btnScheduledToast_Click_1" 

Margin="0 10 0 0" />
    
        </StackPanel>
    </Grid>
</Page>

Notification/Toast/ScheduledToast.xaml.cs

/*
 * 演示如何按計劃顯示 Toast 通知
 * 
 * ScheduledToastNotification - 按計劃顯示 Toast 通知
 *     Content - Toast 的內容,XmlDocument 類型的數據,只讀,其需要在構造函數中指定
 *     DeliveryTime - 顯示 Toast 通知的時間,只讀,其需要在構造函數中指定
 *     SnoozeInterval - 循環顯示 Toast 通知的間隔時長(60 秒 - 60 分之間),只讀,其需要在構造函數中指定
 *     MaximumSnoozeCount - 循環的最大次數(1 - 5 次)
 *     Id - ScheduledToastNotification 的標識
 *     
 * ToastNotifier - Toast 通知器
 *     AddToSchedule() - 將指定的 ScheduledToastNotification 添加到計劃列表
 *     RemoveFromSchedule() - 從計劃列表中移除指定的 ScheduledToastNotification
 *     GetScheduledToastNotifications() - 獲取當前 app 的全部 ScheduledToastNotification 集合
 */
    
using NotificationsExtensions.ToastContent;
using System;
using System.Collections.Generic;
using Windows.UI.Notifications;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;
    
namespace XamlDemo.Notification.Toast
{
    public sealed partial class ScheduledToast : Page
    {
        public ScheduledToast()
        {
            this.InitializeComponent();
        }
    
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            ShowScheduledToasts();
        }
    
        // 添加指定的 ScheduledToastNotification 到計劃列表中
        private void btnScheduledToast_Click_1(object sender, RoutedEventArgs e)
        {
            IToastText02 toastContent = ToastContentFactory.CreateToastText02();
            toastContent.TextHeading.Text = "ScheduledToastNotification Demo";
            toastContent.TextBodyWrap.Text = "received: " + DateTime.Now.ToString("hh:mm:ss");
    
            // 3 秒後顯示 Toast,然後每隔 60 秒再顯示一次 Toast(循環顯示 5 次)
            ScheduledToastNotification toast = new ScheduledToastNotification(toastContent.GetXml(), DateTime.Now.AddSeconds(3), TimeSpan.FromSeconds(60), 5);
    
            string toastId = new Random().Next(1000, 10000).ToString();
            toast.Id = toastId;
    
            // 將指定的 ScheduledToastNotification 添加進計劃列表
            ToastNotifier toastNotifier = ToastNotificationManager.CreateToastNotifier();
            toastNotifier.AddToSchedule(toast);
    
            ShowScheduledToasts();
        }
    
        // 顯示當前 app 的全部 ScheduledToastNotification 列表
        private void ShowScheduledToasts()
        {
            List<MyScheduledToast> dataSource = new List<MyScheduledToast>();
    
            // 獲取當前 app 計劃列表中的全部 ScheduledToastNotification 對象列表
            ToastNotifier toastNotifier = ToastNotificationManager.CreateToastNotifier();
            IReadOnlyList<ScheduledToastNotification> scheduledToasts = toastNotifier.GetScheduledToastNotifications();
    
            int toastCount = scheduledToasts.Count;
            for (int i = 0; i < toastCount; i++)
            {
                ScheduledToastNotification toast = scheduledToasts[i];
    
                dataSource.Add(new MyScheduledToast()
                {
                    ToastId = toast.Id,
                    Text = toast.Content.GetElementsByTagName("text")[0].InnerText
                });
            }
    
            listBox.ItemsSource = dataSource;
        }
    
        // 根據 ToastId 刪除指定的 ScheduledToastNotification
        private void btnRemove_Click_1(object sender, RoutedEventArgs e)
        {
            string toastId = (string)(sender as FrameworkElement).Tag;
    
            // 獲取當前 app 計劃列表中的全部 ScheduledToastNotification 對象列表
            ToastNotifier toastNotifier = ToastNotificationManager.CreateToastNotifier();
            IReadOnlyList<ScheduledToastNotification> scheduledToasts = toastNotifier.GetScheduledToastNotifications();
    
            int toastLength = scheduledToasts.Count;
            for (int i = 0; i < toastLength; i++)
            {
                if (scheduledToasts[i].Id == toastId)
                {
                    // 從計劃列表中移除指定的 ScheduledToastNotification 對象
                    toastNotifier.RemoveFromSchedule(scheduledToasts[i]);
    
                    ShowScheduledToasts();
    
                    break;
                }
            }
        }
    
        class MyScheduledToast
        {
            public string ToastId { get; set; }
            public string Text { get; set; }
        }
    }
}

OK

[源碼下載]:http://files.cnblogs.com/webabcd/Windows8.rar

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved