背水一战 Windows 10 (108) - 通知(Tile): application tile 基础, secondary tile 基础
作者:webabcd
介绍
背水一战 Windows 10 之 通知(Tile)
- application tile 基础
- secondary tile 基础
示例
1、本例用于演示 application tile 的基础
Notification/Tile/ApplicationTileBasic.xaml
<Page
x:Class="Windows10.Notification.Tile.ApplicationTileBasic"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Windows10.Notification.Tile"
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="10 0 10 10"> <TextBlock Name="lblMsg" Margin="5" /> <Button Name="btnUpdateTile" Content="更新 application tile 的数据" Click="btnUpdateTile_Click" Margin="5" /> <Button Name="btnClearTile" Content="清除 application tile 的数据" Click="btnClearTile_Click" Margin="5" /> </StackPanel>
</Grid>
</Page>
Notification/Tile/ApplicationTileBasic.xaml.cs
/*
* 本例用于演示 application tile 的基础
*
*
* TileNotification - Tile 通知
* Content - Tile 的内容,XmlDocument 类型的数据,只读,其需要在构造函数中指定
* ExpirationTime - Tile 通知的过期时间,超过这个时间就会清除这个 Tile
*
* TileUpdateManager - Tile 更新管理器
* CreateTileUpdaterForApplication() - 创建一个 application tile 更新器
*
* TileUpdater - 磁贴的 Tile 更新器
* Update(TileNotification notification) - 将指定的 TileNotification 对象更新到 application tile
* Clear() - 清除 application tile 的数据
* EnableNotificationQueue(bool enable) - 是否启用 tile 的队列功能(即 tile 循环显示),队列最多可容纳 5 个 tile
* EnableNotificationQueueForSquare150x150(bool enable) - 是否启用中磁贴的 tile 队列功能
* EnableNotificationQueueForWide310x150(bool enable) - 是否启用宽磁贴的 tile 队列功能
* EnableNotificationQueueForSquare310x310(bool enable) - 是否启用大磁贴的 tile 队列功能
* Setting - 获取通知设置(NotificationSetting 枚举)
* Enabled - 通知可被显示
* DisabledForApplication, DisabledForUser, DisabledByGroupPolicy, DisabledByManifest - 因相应的原因通知被禁止显示
*
*
* 注:
* 1、磁贴规格分为小,中,宽,大,对于 application tile 来说支持哪种规格的磁贴需要在 Package.appxmanifest 中做相应的配置
* 2、对于 application tile 来说,其左下角是否显示名称可以在 Package.appxmanifest 中配置,可以使其显示指定的短名称,不指定短名称的话则显示的是“显示名称”
* 3、小规格的磁贴无法在其左下角显示名称,但是可以显示 tile 通知(但是不支持 tile 通知的队列功能)
* 4、无法为 application tile 设置启动参数,可以为 secondary tile 设置启动参数
*
*
* 注:本例是通过 xml 来构造 tile 的,另外也可以通过 NuGet 的 Microsoft.Toolkit.Uwp.Notifications 来构造 tile(其用 c# 对 xml 做了封装)
*/ using System;
using Windows.Data.Xml.Dom;
using Windows.UI.Notifications;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls; namespace Windows10.Notification.Tile
{
public sealed partial class ApplicationTileBasic : Page
{
public ApplicationTileBasic()
{
this.InitializeComponent();
} // 更新 application tile 的数据
private void btnUpdateTile_Click(object sender, RoutedEventArgs e)
{
// 用于描述 tile 通知的 xml 字符串
string tileXml = $@"
<tile>
<visual>
<binding template='TileSmall'>
<text>Small(小){DateTime.Now.ToString("HH:mm:ss")}</text>
</binding>
<binding template='TileMedium'>
<text>Medium(中){DateTime.Now.ToString("HH:mm:ss")}</text>
</binding>
<binding template='TileWide'>
<text>Wide(宽){DateTime.Now.ToString("HH:mm:ss")}</text>
</binding>
<binding template='TileLarge'>
<text>Large(大){DateTime.Now.ToString("HH:mm:ss")}</text>
</binding>
</visual>
</tile>"; // 将 xml 字符串转换为 Windows.Data.Xml.Dom.XmlDocument 对象
XmlDocument tileDoc = new XmlDocument();
tileDoc.LoadXml(tileXml);
// 获取此 tile 的 xml
// lblMsg.Text = tileDoc.GetXml(); // 实例化 TileNotification 对象
TileNotification tileNotification = new TileNotification(tileDoc);
DateTimeOffset expirationTime = DateTimeOffset.UtcNow.AddSeconds();
tileNotification.ExpirationTime = expirationTime; // 30 秒后清除这个 tile // 将指定的 TileNotification 对象更新到 application tile
TileUpdater tileUpdater = TileUpdateManager.CreateTileUpdaterForApplication();
tileUpdater.EnableNotificationQueue(true); // 启用 tile 的队列功能(最多可容纳 5 个 tile)
tileUpdater.Update(tileNotification);
} // 清除 application tile 的数据
private void btnClearTile_Click(object sender, RoutedEventArgs e)
{
TileUpdater tileUpdater = TileUpdateManager.CreateTileUpdaterForApplication();
tileUpdater.Clear();
}
}
}
2、本例用于演示 secondary tile 的基础
Notification/Tile/SecondaryTileBasic.xaml
<Page
x:Class="Windows10.Notification.Tile.SecondaryTileBasic"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Windows10.Notification.Tile"
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="10 0 10 10"> <TextBlock Name="lblMsg" Margin="5" /> <Button Name="btnPinSecondaryTile" Content="固定一个新的 SecondaryTile(可以固定多个)" Click="btnPinSecondaryTile_Click" Margin="5" /> <Button Name="btnUpdateSecondaryTile" Content="更新所有的 SecondaryTile 通知" Click="btnUpdateSecondaryTile_Click" Margin="5" /> <Button Name="btnUnpinSecondaryTile" Content="取消固定所有的 SecondaryTile" Click="btnUnpinSecondaryTile_Click" Margin="5" /> </StackPanel>
</Grid>
</Page>
Notification/Tile/SecondaryTileBasic.xaml.cs
/*
* 本例用于演示 secondary tile 的基础
*
*
* SecondaryTile - secondary tile
* TileId - secondary tile 的唯一标识
* SecondaryTile.Exists(tileId) - 指定 TileId 的 secondary tile 是否存在(静态方法)
* SecondaryTile secondaryTile = new SecondaryTile(tileId)
* 如果指定的 tileId 不存在,则创建 SecondaryTile 对象
* 如果指定的 tileId 存在,则返回此 SecondaryTile 对象
* SecondaryTile secondaryTile = SecondaryTile(string tileId, string displayName, string arguments, Uri square150x150Logo, TileSize desiredSize)
* tileId - secondary tile 的唯一标识(指定的 tileId 不存在,则创建 SecondaryTile 对象;指定的 tileId 存在,则返回此 SecondaryTile 对象)
* displayName - 磁贴左下角的显示名称(磁贴的 ToolTip 用的也是此值)
* arguments - 启动参数
* square150x150Logo - 中磁贴图标
* desiredSize - 固定到开始屏幕时的期望的初始规格(Square150x150, Wide310x150)
* DisplayName - 磁贴左下角的显示名称(磁贴的 ToolTip 用的也是此值)
* Arguments - 启动参数(通过磁贴启动 app 时可以获取此参数,只可以在 OnLaunched 中获取,在 OnActivated 之类的中是获取不到的))
* VisualElements - 返回一个 SecondaryTileVisualElements 对象,用于设置磁贴的部分显示属性
* RequestCreateAsync() - 请求固定此 SecondaryTile(会弹出确认框)
* RequestDeleteAsync() - 请求取消固定此 SecondaryTile
* UpdateAsync() - 更新此 SecondaryTile(这里不是更新 Tile 通知,而只是更新 SecondaryTile 对象的相关信息)
* FindAllAsync() - 获取此 app 固定到开始屏幕的所有 SecondaryTile 集合(静态方法)
*
* SecondaryTileVisualElements - 磁贴的部分显示属性
* BackgroundColor - 背景颜色
* ForegroundText - 前景色类别(Dark 或 Light)
* Square150x150Logo - 中磁贴的图标的地址
* Wide310x150Logo - 宽磁贴的图标的地址
* Square310x310Logo - 大磁贴的图标的地址
* ShowNameOnSquare150x150Logo - 是否在中磁贴的左下角显示名称
* ShowNameOnWide310x150Logo - 是否在宽磁贴的左下角显示名称
* ShowNameOnSquare310x310Logo - 是否在大磁贴的左下角显示名称
*
* TileNotification - Tile 通知
* Content - Tile 的内容,XmlDocument 类型的数据,只读,其需要在构造函数中指定
* ExpirationTime - Tile 通知的过期时间,超过这个时间就会清除这个 Tile
*
* TileUpdateManager - Tile 更新管理器
* CreateTileUpdaterForSecondaryTile(string tileId) - 为指定的 SecondaryTile 创建一个 Tile 更新器,返回 TileUpdater 类型的数据
*
* TileUpdater - 磁贴的 Tile 更新器
* Update(TileNotification notification) - 将指定的 TileNotification 对象更新到指定的 secondary tile
* Clear() - 清除 secondary tile 的数据
* EnableNotificationQueue(bool enable) - 是否启用 tile 的队列功能(即 tile 循环显示),队列最多可容纳 5 个 tile
* EnableNotificationQueueForSquare150x150(bool enable) - 是否启用中磁贴的 tile 队列功能
* EnableNotificationQueueForWide310x150(bool enable) - 是否启用宽磁贴的 tile 队列功能
* EnableNotificationQueueForSquare310x310(bool enable) - 是否启用大磁贴的 tile 队列功能
* Setting - 获取通知设置(NotificationSetting 枚举)
* Enabled - 通知可被显示
* DisabledForApplication, DisabledForUser, DisabledByGroupPolicy, DisabledByManifest - 因相应的原因通知被禁止显示
*
*
* 注:
* 1、磁贴规格分为小,中,宽,大
* 2、小规格的磁贴无法在其左下角显示名称,但是可以显示 tile 通知(但是不支持 tile 通知的队列功能)
* 3、对于 secondary tile 来说,每个磁贴都可以为其设置一个启动参数,此启动参数与磁贴当前显示的是什么通知无关,其只与磁贴有关
* 4、单击 secondary tile 启动 app 时,可以在 App.xaml.cs 中通过如下方式获取启动参数(本例的相关代码在 /UI/MySplashScreen.xaml.cs 中)
* protected async override void OnLaunched(LaunchActivatedEventArgs args)
* {
* string arguments = args.Arguments;
* }
*
*
* 注:本例是通过 xml 来构造 tile 的,另外也可以通过 NuGet 的 Microsoft.Toolkit.Uwp.Notifications 来构造 tile(其用 c# 对 xml 做了封装)
*/ using System;
using System.Collections.Generic;
using Windows.Data.Xml.Dom;
using Windows.UI;
using Windows.UI.Notifications;
using Windows.UI.StartScreen;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls; namespace Windows10.Notification.Tile
{
public sealed partial class SecondaryTileBasic : Page
{
private Random _random = new Random(); public SecondaryTileBasic()
{
this.InitializeComponent();
} // 固定一个新的 SecondaryTile(可以固定多个)
private async void btnPinSecondaryTile_Click(object sender, RoutedEventArgs e)
{
Uri square150x150Logo = new Uri("ms-appx:///Assets/Square150x150Logo.png");
Uri wide310x150Logo = new Uri("ms-appx:///Assets/Wide310x150Logo.png");
Uri square310x310Logo = new Uri("ms-appx:///Assets/Square310x310Logo.png"); string tileId = _random.Next(, ).ToString(); /*
if (SecondaryTile.Exists(tileId)) // 指定 tileId 的 secondary tile 是否存在
{
SecondaryTile secondaryTile = new SecondaryTile(tileId); // 通过 tileId 获取指定的 SecondaryTile 对象
}
*/ // 创建一个 SecondaryTile 对象
SecondaryTile secondaryTile = new SecondaryTile
(
tileId,
"DisplayName",
$"Arguments(TileId: {tileId}){DateTime.Now.ToString("HH:mm:ss")}", // 不能设置为空,否则会报错
square150x150Logo,
TileSize.Wide310x150 // 我这里测试,只能设置为 Square150x150 或 Wide310x150
); secondaryTile.VisualElements.Wide310x150Logo = wide310x150Logo;
secondaryTile.VisualElements.Square310x310Logo = square310x310Logo; secondaryTile.VisualElements.ShowNameOnSquare150x150Logo = true;
secondaryTile.VisualElements.ShowNameOnWide310x150Logo = true;
secondaryTile.VisualElements.ShowNameOnSquare310x310Logo = true; secondaryTile.VisualElements.BackgroundColor = Colors.Orange;
secondaryTile.VisualElements.ForegroundText = ForegroundText.Light; try
{
bool isPinned = await secondaryTile.RequestCreateAsync();
lblMsg.Text = isPinned ? "固定成功" : "固定失败";
}
catch (Exception ex)
{
lblMsg.Text = "固定失败: " + ex.ToString();
}
} // 更新所有的 SecondaryTile 通知
private async void btnUpdateSecondaryTile_Click(object sender, RoutedEventArgs e)
{
IReadOnlyList<SecondaryTile> secondaryTileList = await SecondaryTile.FindAllAsync();
foreach (var secondaryTile in secondaryTileList)
{
// 用于描述 tile 通知的 xml 字符串
string tileXml = $@"
<tile>
<visual>
<binding template='TileSmall'>
<text>Small(小){DateTime.Now.ToString("HH:mm:ss")}</text>
</binding>
<binding template='TileMedium'>
<text>Medium(中){DateTime.Now.ToString("HH:mm:ss")}</text>
</binding>
<binding template='TileWide'>
<text>Wide(宽){DateTime.Now.ToString("HH:mm:ss")}</text>
</binding>
<binding template='TileLarge'>
<text>Large(大){DateTime.Now.ToString("HH:mm:ss")}</text>
</binding>
</visual>
</tile>"; // 将 xml 字符串转换为 Windows.Data.Xml.Dom.XmlDocument 对象
XmlDocument tileDoc = new XmlDocument();
tileDoc.LoadXml(tileXml);
// 获取此 tile 的 xml
// lblMsg.Text = tileDoc.GetXml(); // 实例化 TileNotification 对象
TileNotification tileNotification = new TileNotification(tileDoc);
DateTimeOffset expirationTime = DateTimeOffset.UtcNow.AddSeconds();
tileNotification.ExpirationTime = expirationTime; // 30 秒后清除这个 tile // 将指定的 TileNotification 对象更新到 secondary tile
TileUpdater tileUpdater = TileUpdateManager.CreateTileUpdaterForSecondaryTile(secondaryTile.TileId);
tileUpdater.EnableNotificationQueue(true); // 启用 tile 的队列功能(最多可容纳 5 个 tile)
tileUpdater.Update(tileNotification); // 更新此 SecondaryTile 对象的相关信息
secondaryTile.Arguments = $"Arguments(TileId: {secondaryTile.TileId}){DateTime.Now.ToString("HH:mm:ss")}";
bool success = await secondaryTile.UpdateAsync();
}
} // 取消固定所有的 SecondaryTile
private async void btnUnpinSecondaryTile_Click(object sender, RoutedEventArgs e)
{
IReadOnlyList<SecondaryTile> secondaryTileList = await SecondaryTile.FindAllAsync();
foreach (SecondaryTile secondaryTile in secondaryTileList)
{
try
{
bool isUnpinned = await secondaryTile.RequestDeleteAsync();
lblMsg.Text = isUnpinned ? "取消固定成功" : "取消固定失败";
}
catch (Exception ex)
{
lblMsg.Text = "取消固定失败: " + ex.ToString();
}
}
}
}
}
OK
[源码下载]
背水一战 Windows 10 (108) - 通知(Tile): application tile 基础, secondary tile 基础的更多相关文章
- 背水一战 Windows 10 (109) - 通知(Tile): 按计划显示 tile 通知, 轮询服务端以更新 tile 通知
[源码下载] 背水一战 Windows 10 (109) - 通知(Tile): 按计划显示 tile 通知, 轮询服务端以更新 tile 通知 作者:webabcd 介绍背水一战 Windows 1 ...
- 背水一战 Windows 10 (111) - 通知(Tile): secondary tile 模板之图片, secondary tile 模板之分组
[源码下载] 背水一战 Windows 10 (111) - 通知(Tile): secondary tile 模板之图片, secondary tile 模板之分组 作者:webabcd 介绍背水一 ...
- 背水一战 Windows 10 (110) - 通知(Tile): secondary tile 模板之基础, secondary tile 模板之文本
[源码下载] 背水一战 Windows 10 (110) - 通知(Tile): secondary tile 模板之基础, secondary tile 模板之文本 作者:webabcd 介绍背水一 ...
- 背水一战 Windows 10 (112) - 通知(Badge): application 的 badge 通知, secondary 的 badge 通知, 轮询服务端以更新 badge 通知
[源码下载] 背水一战 Windows 10 (112) - 通知(Badge): application 的 badge 通知, secondary 的 badge 通知, 轮询服务端以更新 bad ...
- 背水一战 Windows 10 (107) - 通知(Toast): 提示音, 特定场景
[源码下载] 背水一战 Windows 10 (107) - 通知(Toast): 提示音, 特定场景 作者:webabcd 介绍背水一战 Windows 10 之 通知(Toast) 提示音 特定场 ...
- 背水一战 Windows 10 (106) - 通知(Toast): 通过 toast 打开协议, 通过 toast 选择在指定的时间之后延迟提醒或者取消延迟提醒
[源码下载] 背水一战 Windows 10 (106) - 通知(Toast): 通过 toast 打开协议, 通过 toast 选择在指定的时间之后延迟提醒或者取消延迟提醒 作者:webabcd ...
- 背水一战 Windows 10 (105) - 通知(Toast): 带按钮的 toast, 带输入的 toast(文本输入框,下拉选择框)
[源码下载] 背水一战 Windows 10 (105) - 通知(Toast): 带按钮的 toast, 带输入的 toast(文本输入框,下拉选择框) 作者:webabcd 介绍背水一战 Wind ...
- 背水一战 Windows 10 (104) - 通知(Toast): 纯文本 toast, 短时 toast, 长时 toast, 图文 toast
[源码下载] 背水一战 Windows 10 (104) - 通知(Toast): 纯文本 toast, 短时 toast, 长时 toast, 图文 toast 作者:webabcd 介绍背水一战 ...
- 背水一战 Windows 10 (103) - 通知(Toast): 基础, 按计划显示 toast 通知
[源码下载] 背水一战 Windows 10 (103) - 通知(Toast): 基础, 按计划显示 toast 通知 作者:webabcd 介绍背水一战 Windows 10 之 通知(Toast ...
随机推荐
- python包的一些问题
1查看python包的版本 2 卸载包的方法 3指定python包的安装版本 参考网址 https://blog.csdn.net/colourful_sky/article/details/8018 ...
- ajax执行成功不进入success方法
当dataType的值为json时,传入的值和返回的值符合json格式的时候,执行成功才会进入success方法,否则进入error方法.
- tiny4412 --Uboot移植(6) SD卡驱动,启动内核
开发环境:win10 64位 + VMware12 + Ubuntu14.04 32位 工具链:linaro提供的gcc-linaro-6.1.1-2016.08-x86_64_arm-linux-g ...
- Python中安装bs4后,pycharm依然报错ModuleNotFoundError: No module named 'bs4'
学习网络抓取时,第一步出现问题. 执行示例代码 from urllib.request import urlopen from bs4 import BeautifulSoup html = urlo ...
- 7A - Max Sum
Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum of a sub-sequence. F ...
- Python模拟接口登录
参考地址:https://blog.csdn.net/rifengxxc/article/details/77414090 下面讲下关于python模拟登录实验,之前怎么调试也不行,我也是摸索了好久, ...
- 《JAVA程序设计》第五周总结
第五周学习总结 本周目录: 第六章知识梳理 本周学习时遇到的问题和解决过程 上周错题与解析 码云链接 感想 第六章知识梳理: 接口:使用关键字interface定义,分为接口声明和接口体. inter ...
- python写注册
# coding = UTF-8 注释格式 import datetime 引用日期 today = datetime.datetime.today().strftime("%Y-%m-%d ...
- UI交互设计关键词:情感化设计与心理
情感化设计,一定有一个关键词.情感,是指人对周围事物和自身以及对自己行为的态度,它是人对客观事物的一种特殊的反映形式,是主体对外界刺激给予肯定或否定的心理反应,也是对客观事物是否符合自己需要的态度或体 ...
- [Hadoop]Hadoop章2 HDFS原理及读写过程
HDFS(Hadoop Distributed File System )Hadoop分布式文件系统. HDFS有很多特点: ① 保存多个副本,且提供容错机制,副本丢失或宕机自动恢复.默认存3份. ② ...