zoukankan      html  css  js  c++  java
  • 重新想象 Windows 8.1 Store Apps (85)

    [源码下载]


    重新想象 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">
    " +
                        "<visual>
    " +
                            "<binding template="ToastText02">
    " +
                                "<text id="1">text1</text>
    " +
                                "<text id="2">text2</text>
    " +
                            "</binding>
    " +
                        "</visual>
    " +
                        "<commands scenario="alarm">
    " + // 除了 alarm 还有 incomingCall
                            "<command id="snooze"/>
    " + // snooze 代表在闹钟 toast 中显示“暂停”按钮(小睡一会)
                            "<command id="dismiss"/>
    " + // dismiss 代表在闹钟 toast 中显示“取消”按钮
                        "</commands>
    " +
                        // 闹钟铃声: 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" />
    " + 
                    "</toast>
    ";
    
                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	iles");
                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
    [源码下载]

  • 相关阅读:
    PHP微信公众号支付,JSAPI支付方法,ThinkPHP5+微信支付
    PHP微信扫码支付DEMO,thinkphp5+微信支付
    解决vue axios跨域请求发送两次问题
    解决navicat远程连接mysql很卡的问题
    GIT的工作原理和基本命令
    简单好用的网站压力测试工具
    vscode中让html中php代码高亮
    redis的安装及使用总结
    tp32-layuicms项目介绍
    vscode Vue格式化HTML标签换行问题
  • 原文地址:https://www.cnblogs.com/webabcd/p/3857710.html
Copyright © 2011-2022 走看看