重新想象 Windows 8.1 Store Apps (85) - 警报通知(闹钟), Tile 的新特性

简介: 原文:重新想象 Windows 8.1 Store Apps (85) - 警报通知(闹钟), Tile 的新特性[源码下载] 重新想象 Windows 8.1 Store Apps (85) - 警报通知(闹钟), Tile 的新特性 作者:webabcd介绍重新想象 Windows 8.
原文: 重新想象 Windows 8.1 Store Apps (85) - 警报通知(闹钟), Tile 的新特性

[源码下载]


重新想象 Windows 8.1 Store Apps (85) - 警报通知(闹钟), Tile 的新特性



作者:webabcd


介绍
重新想象 Windows 8.1 Store Apps 之通知的新特性

  • 警报通知(闹钟)
  • Tile 的新特性



示例
1、演示 win8.1 中新增的警报 toast(闹钟)
AlarmToast.xaml

<Page
    x:Class="Windows81.Notification.AlarmToast"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Windows81.Notification"
    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">

            <TextBlock Name="lblMsg" FontSize="14.667" Margin="0 10 0 0" />

        </StackPanel>
    </Grid>
</Page>

AlarmToast.xaml.cs

/*
 * 演示 win8.1 中新增的警报 toast(闹钟)
 * 
 * 关于 toast 的基础请参见:http://www.cnblogs.com/webabcd/archive/2013/06/20/3145356.html
 * 
 * 
 * 注:
 * 1、需要在 manifest 中设置支持 toast 通知和锁屏通知
 * 2、需要在 manifest 中的 Application/Extensions 内做如下设置
 * <!--声明此 app 是一个“闹钟”应用,其会出现在“设置”->“电脑和设备”->“锁屏应用”->“选择要显示提醒的应用”列表中-->
   <m2:Extension Category="windows.alarm" />
   <!--为了演示 Notification/AlarmToast 需要如下设置一个后台任务-->
   <Extension Category="windows.backgroundTasks" EntryPoint="SampleForAlarmToast">
     <BackgroundTasks>
       <Task Type="audio" />
       <Task Type="timer" />
     </BackgroundTasks>
   </Extension>
 * 3、系统静音也能播放声音
 * 4、不受免打扰时间的限制
 */

using System;
using Windows.ApplicationModel.Background;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;

namespace Windows81.Notification
{
    public sealed partial class AlarmToast : Page
    {
        public AlarmToast()
        {
            this.InitializeComponent();

            this.Loaded += AlarmToast_Loaded;
        }

        protected async override void OnNavigatedTo(NavigationEventArgs e)
        {
            try
            {
                // 向系统请求成为闹钟应用的权限,会弹出确认对话框
                await AlarmApplicationManager.RequestAccessAsync().AsTask();

                // 获取当前应用程序的成为闹钟应用的权限(AlarmAccessStatus 枚举)
                //     Unspecified - 用户未响应应用程序设置警报的权限请求
                //     AllowedWithWakeupCapability - 用户已经为应用程序授予设置警报的权限,并且警报可以将计算机从待机状态唤醒
                //     AllowedWithoutWakeupCapability - 用户已经为应用程序授予设置警报的权限,但是警报无法将计算机从待机状态唤醒
                //     Denied - 用户已拒绝该应用程序设置警报的权限
                AlarmAccessStatus alarmAccessStatus = AlarmApplicationManager.GetAccessStatus();
                lblMsg.Text = alarmAccessStatus.ToString();
            }
            catch (Exception ex)
            {
                lblMsg.Text = ex.ToString();
            }
        }

        void AlarmToast_Loaded(object sender, RoutedEventArgs e)
        {
            // 关于 toast 通知详见:http://www.cnblogs.com/webabcd/archive/2013/06/20/3145356.html
            string toastXmlString =
                "<toast duration=\"long\">\n" +
                    "<visual>\n" +
                        "<binding template=\"ToastText02\">\n" +
                            "<text id=\"1\">text1</text>\n" +
                            "<text id=\"2\">text2</text>\n" +
                        "</binding>\n" +
                    "</visual>\n" +
                    "<commands scenario=\"alarm\">\n" + // 除了 alarm 还有 incomingCall
                        "<command id=\"snooze\"/>\n" + // snooze 代表在闹钟 toast 中显示“暂停”按钮(小睡一会)
                        "<command id=\"dismiss\"/>\n" + // dismiss 代表在闹钟 toast 中显示“取消”按钮
                    "</commands>\n" +
                    // 闹钟铃声: Notification.Default, Notification.IM, Notification.Mail, Notification.Reminder, Notification.SMS, Notification.Looping.Alarm, Notification.Looping.Alarm2, Notification.Looping.Alarm3, Notification.Looping.Alarm4, Notification.Looping.Alarm5, Notification.Looping.Alarm6, Notification.Looping.Alarm7, Notification.Looping.Alarm8, Notification.Looping.Alarm9, Notification.Looping.Alarm10, Notification.Looping.Call, Notification.Looping.Call2, Notification.Looping.Call3, Notification.Looping.Call4, Notification.Looping.Call5, Notification.Looping.Call6, Notification.Looping.Call7, Notification.Looping.Call8, Notification.Looping.Call9, Notification.Looping.Call10
                    "<audio src=\"Notification.Looping.Alarm2\" loop=\"true\" />\n" + 
                "</toast>\n";

            var toastDOM = new Windows.Data.Xml.Dom.XmlDocument();
            toastDOM.LoadXml(toastXmlString);

            var toastNotifier = Windows.UI.Notifications.ToastNotificationManager.CreateToastNotifier();
            // 闹钟 toast 提示出现后,如果点击“暂停”(snooze)按钮,则第 3 个参数指定的时间过后继续弹出闹钟 toast,本例是 120 秒
            var customAlarmScheduledToast = new Windows.UI.Notifications.ScheduledToastNotification(toastDOM, DateTime.Now.AddSeconds(5), TimeSpan.FromSeconds(120), 0); 
            toastNotifier.AddToSchedule(customAlarmScheduledToast);
        }
    }
}


2、win8.1 中的 tile 模板增加到 75 个
Tile.xaml

<Page
    x:Class="Windows81.Notification.Tile"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Windows81.Notification"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="Transparent">
        <Grid.Resources>
            <Style x:Key="ItemTitleStyle" TargetType="TextBlock">
                <Setter Property="FontSize" Value="14.667"/>
            </Style>

            <ItemsPanelTemplate x:Key="StoreFrontGridItemsPanelTemplate">
                <WrapGrid MaximumRowsOrColumns="3" VerticalChildrenAlignment="Top" HorizontalChildrenAlignment="Left"/>
            </ItemsPanelTemplate>

            <Style x:Key="StoreFrontTileStyle"  TargetType="GridViewItem">
                <Setter Property="FontFamily" Value="Segoe UI" />
                <Setter Property="Height" Value="310" />
                <Setter Property="Width" Value="310" />
                <Setter Property="Padding" Value="0" />
                <Setter Property="Margin" Value="5" />
                <Setter Property="HorizontalContentAlignment" Value="Left" />
                <Setter Property="VerticalContentAlignment" Value="Top" />
                <Setter Property="BorderThickness" Value="0"/>
                <Setter Property="TabNavigation" Value="Local" />
            </Style>

            <DataTemplate x:Key="StoreFrontTileTemplate">
                <Grid HorizontalAlignment="Left" Background="Transparent">
                    <StackPanel Orientation="Vertical">
                        <TextBlock TextWrapping="Wrap" VerticalAlignment="Center" Text="{Binding FileName}" HorizontalAlignment="Left" />
                        <Image Source="{Binding Path}" Stretch="None" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="0,10,0,0"/>
                    </StackPanel>
                </Grid>
            </DataTemplate>
        </Grid.Resources>

        <!--显示 75 种不同的 Tile 模板-->
        <GridView x:Name="gridView" Margin="120 0 0 0"
            ItemTemplate="{StaticResource StoreFrontTileTemplate}"
            ItemContainerStyle="{StaticResource StoreFrontTileStyle}"
            ItemsPanel="{StaticResource StoreFrontGridItemsPanelTemplate}"
            BorderBrush="LightGray" VerticalAlignment="Top"
            ScrollViewer.VerticalScrollBarVisibility="Auto"
            ScrollViewer.HorizontalScrollBarVisibility="Auto" 
            SelectionMode="None" />
    </Grid>
</Page>

Tile.xaml.cs

/*
 * win8.1 中的 tile 模板增加到 75 个
 * 
 * 
 * 关于 tile 的基础请参见:http://www.cnblogs.com/webabcd/archive/2013/06/24/3151864.html
 * 
 * 
 * win 8.1 中 tile 的新特性如下:
 * 1、tile 分 4 种:小 = Square70x70, 中等 = Square150x150, 长方形 = Wide310x150, 大 = Square310x310
 * 2、可以在 manifest 中指定 app 安装后默认的 tile 类型
 * 3、使用 tile 模板时,其命名规则也变了,参见 NotificationsExtensions 项目(比如 win8 中的 TileSquareImage 在 win8.1 中变为了 TileSquare150x150Image)
 * 4、tile 基础(通过 NotificationsExtensions 创建)参见:http://www.cnblogs.com/webabcd/archive/2013/06/24/3151864.html
 * 5、tile 基础(通过手工构造 xml)参见:http://www.cnblogs.com/webabcd/archive/2013/06/17/3139740.html
 * 6、如果想要支持 Square310x310,则必须要支持 Wide310x150
 * 7、建议为缩放比例 0.8x、1x、1.4x 和 1.8x 提供相对应的资源,以达到更好的显示效果
 * 8、tile 的通知队列,除了 TileUpdater.EnableNotificationQueue() 外还支持只在指定大小的 tile 上启用 tile 队列:TileUpdater.EnableNotificationQueueForSquare150x150(), TileUpdater.EnableNotificationQueueForSquare310x310(), TileUpdater.EnableNotificationQueueForWide310x150()
 * 9、新增 SecondaryTile.PhoneticName,可以指定 SecondaryTile 的名字的拼音,系统将据此排序 UI 
 * 10、为了同时支持 win8 和 win8.1 新增了 fallback 属性,类似如下使用(找不到 TileSquare150x150Image 的话则用 TileSquareImage,找不到 TileWide310x150Image 的话则用 TileWideImage)
<tile>
  <visual version="2">
    <binding template="TileSquare150x150Image" fallback="TileSquareImage" branding="None">
      <image id="1" src="Assets/Images/w6.png"/>
    </binding>
    <binding template="TileWide310x150Image" fallback="TileWideImage" branding="None">
      <image id="1" src="Assets/Images/sq5.png"/>
    </binding>
    <binding template="TileSquare310x310Image" branding="None">
      <image id="1" src="Assets/Images/sq6.png"/>
    </binding>
  </visual>
</tile>
 */

using System;
using System.Linq;
using Windows.ApplicationModel;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;

namespace Windows81.Notification
{
    public sealed partial class Tile : Page
    {
        public Tile()
        {
            this.InitializeComponent();
        }

        protected async override void OnNavigatedTo(NavigationEventArgs e)
        {
            // Windows81/Notification/tiles 文件夹内 75 张图片分别用于演示 Tile 的 75 种模板

            var folder = await Package.Current.InstalledLocation.GetFolderAsync(@"Notification\tiles");
            var files = await folder.GetFilesAsync();

            var dataSource = from p in files
                             select new
                             {
                                 FileName = p.DisplayName,
                                 Path = "ms-appx:///Notification/tiles/" + p.Name
                             };

            gridView.ItemsSource = dataSource;
        }
    }
}



OK
[源码下载]

目录
相关文章
|
4月前
|
Linux C++ Windows
【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数
【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数
【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数
|
1月前
|
C# Windows
【Azure App Service】在App Service for Windows上验证能占用的内存最大值
根据以上测验,当使用App Service内存没有达到预期的值,且应用异常日志出现OutOfMemory时,就需要检查Platform的设置是否位64bit。
44 11
|
4月前
|
Java 应用服务中间件 开发工具
[App Service for Windows]通过 KUDU 查看 Tomcat 配置信息
[App Service for Windows]通过 KUDU 查看 Tomcat 配置信息
|
4月前
|
Java 应用服务中间件 Windows
【App Service for Windows】为 App Service 配置自定义 Tomcat 环境
【App Service for Windows】为 App Service 配置自定义 Tomcat 环境
|
4月前
|
PHP Windows
【Azure App Service for Windows】 PHP应用出现500 : The page cannot be displayed because an internal server error has occurred. 错误
【Azure App Service for Windows】 PHP应用出现500 : The page cannot be displayed because an internal server error has occurred. 错误
|
4月前
|
PHP 开发工具 git
【Azure 应用服务】在 App Service for Windows 中自定义 PHP 版本的方法
【Azure 应用服务】在 App Service for Windows 中自定义 PHP 版本的方法
|
4月前
|
网络安全 API 数据安全/隐私保护
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Windows)
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Windows)
|
4月前
|
Shell PHP Windows
【Azure App Service】Web Job 报错 UNC paths are not supported. Defaulting to Windows directory.
【Azure App Service】Web Job 报错 UNC paths are not supported. Defaulting to Windows directory.
|
4月前
|
存储 Linux Windows
【应用服务 App Service】App Service For Windows 如何挂载Storage Account File Share 示例
【应用服务 App Service】App Service For Windows 如何挂载Storage Account File Share 示例
|
4月前
|
应用服务中间件 nginx Windows
【Azure 应用服务】在App Service for Windows中实现反向代理
【Azure 应用服务】在App Service for Windows中实现反向代理

热门文章

最新文章