前面我们使用了 MessageDialog来作为弹窗,这里来介绍一个更加高大上的Toast通知。

Toast通知本质上动力是由XML来提供的,一开始我还不相信不知道XML原来有这么大的威力。现在就来看看和Toast相关的知识。

1)实例化ToastNotification类。

ToastNotification toast1 = new ToastNotification(xdoc);            

2)使用ToastNotificationManager来管理Toast通知,包括添加、展示、移除、获取通知等等。

ToastNotificationManager.CreateToastNotifier().Show(toast1);

3)在第一步中的xdoc就是一段XML数据,它从何而来呢?

XmlDocument xdoc = new XmlDocument();

4)上一步代码实例化了一个XML,但是它没有数据呀,数据从哪来呢?

xdoc.LoadXml(txtXML.Text);

5)这段代码就将一段Text导入了XML中。而Text数据有很多种获取方式。在下文中自然会提到。

Toast的XML模板有许多,我们可以直接来获取它们。用枚举和强大的var即可。

var items = Enum.GetNames(typeof(ToastTemplateType));

那么就正式开工了,因为重复的属性太多了我就大概设置了2个Style资源。

    <Page.Resources><Style TargetType="TextBlock" x:Key="StyleHeaderTextBlock"><Setter Property="FontSize" Value="40"/><Setter Property="FontFamily"  Value="华文琥珀"/><Setter Property="Foreground" Value="HotPink"/><Setter Property="Margin" Value="12"/></Style><Style TargetType="Button" x:Key="StyleToastButton"><Setter Property="Width" Value="180"/><Setter Property="Height" Value="50"/><Setter Property="Background" Value="Aqua"/><Setter Property="FontSize" Value="21"/><Setter Property="Margin" Value="12"/><Setter Property="Content" Value="显示Toast通知" /></Style></Page.Resources>

下面是第一部分用于生成Toast通知。

       <StackPanel Orientation="Vertical" Grid.Column="0" Margin="12"><TextBlock Text="生成Toast通知" Style="{StaticResource StyleHeaderTextBlock}"/><StackPanel Orientation="Horizontal" HorizontalAlignment="Left"><TextBlock FontSize="24" Foreground="Wheat" Text="请选择一个模板:" VerticalAlignment="Center"/><ComboBox Name="comboBoxToast" Foreground="Green"  Width="275" SelectionChanged="comboBoxToast_SelectionChanged"/></StackPanel><TextBox Foreground="Green" x:Name="txtXML" HorizontalAlignment="Left" Width="500" Height="400" Header="模板XML:" TextWrapping="Wrap" FontSize="24"/><Button Name="btnShowToast1" Click="btnShowToast1_Click"  Style="{StaticResource StyleToastButton}"/></StackPanel>

后台代码也蛮容易的,利用上面讲的就好了。

        public MainPage(){this.InitializeComponent();           var items = Enum.GetNames(typeof(ToastTemplateType));this.comboBoxToast.ItemsSource = items;}private void comboBoxToast_SelectionChanged(object sender, SelectionChangedEventArgs e){string tempt = ((ComboBox)sender).SelectedItem as string;if (!string.IsNullOrEmpty(tempt)){               ToastTemplateType template = (ToastTemplateType)Enum.Parse(typeof(ToastTemplateType), tempt);XmlDocument xdoc = ToastNotificationManager.GetTemplateContent(template);txtXML.Text = xdoc.GetXml();}}private void btnShowToast1_Click(object sender, RoutedEventArgs e){if (txtXML.Text == "")           return;          XmlDocument xdoc = new XmlDocument();xdoc.LoadXml(txtXML.Text);          ToastNotification toast1 = new ToastNotification(xdoc);            ToastNotificationManager.CreateToastNotifier().Show(toast1);         }

模板是这样用的……

在src中填入图片的路径也可以在Toast中显示图像哦,赶紧试试吧……

接下来是第二段啦,和前面的很是类似……

    <StackPanel Orientation="Vertical" Grid.Column="1"><TextBlock Text="更改Toast通知的提示音" Style="{StaticResource StyleHeaderTextBlock}"/><TextBlock Margin="12" Text="请输入Toast消息内容:" FontSize="24"/><TextBox Margin="12" Height="50" x:Name="txtMesaage"/><TextBlock  Margin="12" FontSize="24" Text="请选择一种提示声音:"/><ComboBox Margin="12" Height="50" x:Name="comboBoxAudio" Width="400" HorizontalAlignment="Left"><ComboBoxItem IsSelected="True">ms-winsoundevent:Notification.Default</ComboBoxItem><ComboBoxItem>ms-winsoundevent:Notification.IM</ComboBoxItem><ComboBoxItem>ms-winsoundevent:Notification.Mail</ComboBoxItem><ComboBoxItem>ms-winsoundevent:Notification.Reminder</ComboBoxItem><ComboBoxItem>ms-winsoundevent:Notification.Looping.Alarm</ComboBoxItem><ComboBoxItem>ms-winsoundevent:Notification.Looping.Call</ComboBoxItem></ComboBox><StackPanel Orientation="Horizontal"><CheckBox x:Name="checkBoxLoop" Margin="12" Content="循环播放"/><CheckBox x:Name="checkBoxSilent" Margin="12" Content="静音"/></StackPanel>           <Button Name="btnShowToast2" Click="btnShowToast2_Click"  Style="{StaticResource StyleToastButton}"/></StackPanel>

上面代码中的“ms-winsoundevent:Notification.Default”都是填到src中的用于设置声音,还可以在loop、silent中设置是否循环以及是否静音,那到底该怎么用呢?应该将这些属性全部都填入到XML中。

xmlContent = string.Format("<toast duration='{0}'>" +"<visual>" +"<binding template='ToastText01'>" +"<text id='1'>{1}</text>" +"</binding>" +"</visual>" +"<audio src='{2}' loop='{3}' silent='{4}'/>" +"</toast>",toastDuration, msg, audioSrc, isLoop, isSilent
);             

上面用的xmlContent也要先定义出来,一开始设置为Empty就好。

string xmlContent = string.Empty;  

isLoop和isSilent属性都可以借助于三目运算符在CheckBox中获取来。

string isLoop = checkBoxLoop.IsChecked == true ? "true" : "false";
string audioSrc = (comboBoxAudio.SelectedItem as ComboBoxItem).Content.ToString();
string toastDuration = checkBoxLoop.IsChecked == true ? "long" : "short";
string isSilent = checkBoxSilent.IsChecked == true ? "true" : "false";        

当然,考虑得更加周到些,用户可以在还没有输入通知内容就点了显示Toast通知按钮,对此用三目运算符也是极好的选择。

string msg = txtMesaage.Text == "" ? "你还没有输入Toast通知的内容呢……" : txtMesaage.Text;   

这些准备工作都写好了以后呢就该设置Toast通知了,和上面的Toast1类似哦,大家试试。

可是这些通知都没有时间性可言,因为有时候我们需要定在一个时间来执行Toast通知。这自然也是可以实现的。

先作如下界面设计。

      <StackPanel Orientation="Vertical" Grid.Column="2"><TextBlock Text="计划时间显示Toast通知" Style="{StaticResource StyleHeaderTextBlock}"/>  <StackPanel Orientation="Horizontal" Height="60"><TextBlock FontSize="28" Text="计划在"  VerticalAlignment="Center"/><TextBox Name="tBoxTime" FontSize="28" Width="60" Height="45" VerticalAlignment="Center"/><TextBlock FontSize="28" Text="秒后显示Toast通知" VerticalAlignment="Center"/></StackPanel>                <Button Name="btnShowToast3" Click="btnShowToast3_Click"  Style="{StaticResource StyleToastButton}"/></StackPanel>

后台代码如下。

        private async void btnShowToast3_Click(object sender, RoutedEventArgs e){int toastTime;try{                      toastTime = int.Parse(tBoxTime.Text.ToString());XmlDocument xdoc = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText01);                var txtnodes = xdoc.GetElementsByTagName("text");                txtnodes[0].InnerText = "你好,这是一条定时为"+toastTime.ToString()+ "秒的Toast消息。";              ScheduledToastNotification toast3 = new ScheduledToastNotification(xdoc, DateTimeOffset.Now.AddSeconds(toastTime));                ToastNotificationManager.CreateToastNotifier().AddToSchedule(toast3);}catch (Exception ex){                  Windows.UI.Popups.MessageDialog messageDialog =    new Windows.UI.Popups.MessageDialog(ex.Message);await messageDialog.ShowAsync();}             }   

在这个小程序中因为侧重于讲解定时而非Toast的通知样式,因此就选用了比较简单的ToastText01模板。而后找出Text节点,并向该节点写入内容。最后就是创建Toast通知了。

ScheduledToastNotification toast3 = new ScheduledToastNotification(xdoc, DateTimeOffset.Now.AddSeconds(toastTime));

同样为了防止用户没有在TextBox中输入时间或输入了错误格式的时间比如“5秒”而做了try、catch异常检测。当然了,在实际产品中,这里可就要做得更加完美了,时间用TextBox来输入并不是一件好事,而应用我们前面介绍的TimePicker。

给这3段程序来张全家福吧~

相关源码我已经上传,不需要积分。

传送门:Toast通知源码



感谢您的访问,希望对您有所帮助。 欢迎大家关注、收藏以及评论。

我的更多博客文章:NoMasp博客导读


为使本文得到斧正和提问,转载请注明出处:
http://blog.csdn.net/nomasp


【万里征程——Windows App开发】使用Toast通知相关推荐

  1. 【万里征程——Windows App开发】应用栏

    基本的用法我们在 [万里征程--Windows App开发]页面布局和基本导航中已经讲过了,这里继续补充关于应用栏的更多用法. Icon 在之前的学习中,我们知道Icon属性中有很多很多系统预定义,但 ...

  2. 【万里征程——Windows App开发】SemanticZoom视图切换

    相信用过Windows Phone或者Windows 8/8.1/10的朋友对下面这张截图肯定不陌生.这就是通过SemanticZoom来实现的,当数据过多时,这种控件尤其适用.它有一个放大视图Zoo ...

  3. 【万里征程——Windows App开发】开发准备

    操作系统及SDK 操作系统 如果打算开发Windows App,那么你的电脑就不能再用老旧的Windows 7了.推荐使用Windows 8.1.写这篇博客的时候,我用的操作系统是Windows 10 ...

  4. 【万里征程——Windows App开发】动态磁贴

    动态磁贴是什么,相信大家用了这么久的Windows 8/8.1/10早就非常了解了吧. 像什么小磁贴.中磁贴.宽磁贴.大磁贴,还有这里的应用商店Logo等,大家在下面根据不同的分辨率选择合适的图片就好 ...

  5. 【万里征程——Windows App开发】数据绑定——简单示例、更改通知、数据转换...

    简单的数据绑定示例 相比于理论,我更倾向于从实践中开始博客,尤其是对于数据绑定.那么,我们先来看看几个简单的例子. 1.数据绑定到TextBox 我们依旧使用前面的闹钟类来开始.在下面的代码中,我们有 ...

  6. 【万里征程——Windows App开发】DatePickerFlyout、TimePickerFlyout的使用

    已经有挺长时间没有更新这个专栏了,不过刚才有网友私信问我一个问题现在就火速更新上一篇~ 这一篇讲解在WP上DataPickerFlyout和TimePickerFlyout的使用,但它们只能在WP上跑 ...

  7. 【万里征程——Windows App开发】DatePickerTimepicker

    在前面我们走马观花地介绍了一大堆控件,其中自然也包括这DatePicker和TimePicker,那么稍微高级些的用法呢? 如果你想做一个关于健身.闹钟等的App,那么不可避免的会用到时间这些控件了. ...

  8. 【万里征程——Windows App开发】文件数据——文件选取器

    使用文件选取器保存文件 就我个人而言,还是非常喜欢使用文件选取器的,因为能够用自己的代码来调用系统的各种弹框. 在这个示例中,首先在XAML中添加一个Button和一个TextBlock,分别命名为b ...

  9. 【万里征程——Windows App开发】控件大集合1

    添加控件的方式有多种,大家更喜欢哪一种呢? 1)使用诸如 Blend for Visual Studio 或 Microsoft Visual Studio XAML 设计器的设计工具. 2)在 Vi ...

最新文章

  1. LeetCode简单题之最小操作次数使数组元素相等
  2. .NET Core剪裁器升级瘦身引擎,并支持剪裁计划的录制和回放
  3. head first python(第三章)–学习笔记
  4. Spring MVC 响应数据、作用域对象
  5. Qt总结之一:遍历文件夹和文件目录,并过滤和获取文件信息、后缀名、前缀名(一)
  6. itunes备份包括哪些内容_软件开发项目技术方案包括哪些内容
  7. JAVA使用465端口与25端口实现发送邮件的业务,以及执行时常见的错误解决方法
  8. 从零开始学习CANoe(四)—— 设计panel
  9. 10套精美而实用的CSS3按钮
  10. Caused by: org.elasticsearch.action.search.SearchPhaseExecutionException报错解决
  11. ArcGIS 制作3D遥感影像图
  12. 学生信息管理系统(头哥适用版)(c语言)
  13. 计算机455端口,455端口怎么关闭-455端口关闭的方法 - 河东软件园
  14. 多人共享的待办事项app有哪些
  15. DEBUG:惠普打印机页边距总是不对
  16. 15 个常用的python 开源框架
  17. 51nod 13831048 整数分解为2的幂 [递推]【数学】
  18. 基于Python的百度AI人脸识别API接口(可用于OpenCV-Python人脸识别)
  19. 时光荏苒,白驹过隙。2018年总结!
  20. 博士申请 | 香港理工大学招收机器学习全奖博士生/博士后/研究助理

热门文章

  1. 计算机专业英语辅导教材,计算机专业英语2全套教材.ppt
  2. geany执行python闪退_说说如何使用 Geany 编译与执行 Python
  3. Mysql经典面试题(建议收藏)
  4. JavaScript一些优雅小技巧不得不知
  5. qq复读机java脚本分享蓝奏云_蓝奏云资源,各种软件分享链接,干货
  6. https://imgsa.baidu.com/forum/pic/item/...【贴吧图床】
  7. 汽车matlab小论文,基于matlab汽车道路模型研究论文
  8. 破解mariadb数据库密码
  9. 四天搞懂生成对抗网络(二)——风格迁移的“精神始祖”Conditional GAN
  10. MATLAB Robotics Toolbox常用函数简介