背水一战 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 ...
随机推荐
- MongoDB设置连接池操作百万级以上数据
开发环境 spring 4.3.7 + springBoot 1.5.2 + dubbo 2.6.5 + mongoDB 4.0.0 连接池配置 mongo-pool.properties sprin ...
- Vue的从入门到放弃
此贴仅记录vue学习路程中遇见的大大小小,形形色色的问题 1. vue自动打开浏览器配置: 当使用vue 脚手架搭建项目后启动npm run dev,会出现 但是不会自动打开浏览器的,这时候去con ...
- windows7 ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法
用PL/SQL连接虚拟机中的Oracle数据库,发现又报了“ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务”错误,帮其解决后,发现很多人遇到过这样的问题,因此写着这里. 也许你没 ...
- How to Read a Paper
How to Read a Paper 原文: https://www.yuque.com/lart/papers/yrkv5u 题目:How to Read a Paper 作者:S. Keshav ...
- 【转】为什么分布式一定要有Redis?
发现一篇好文. https://studygolang.com/articles/15064
- logstash 修改配置不重启的方法
1.修改好yml配置 2.进入logstash 容器内,或服务器上 3.ps -ef | grep logstash 拿到进程号 4.kill -1 <pid> 5.logstash 会重 ...
- paxos made more simple
paxos算法是进入分布式领域的一块基石,有关paxos的讨论有很多精彩的详细论述,很多牛人不惜宝贵时间以大幅详尽段落叙述.感谢他们,paxos more simple 理解paxos前,我建议以面到 ...
- Chapter5_初始化与清理_enum关键字
enum关键字虽然只是一个很小的特性,但是它在我们使用枚举类型时,可以很方便的处理.先举一个例子. enum Speciness{ NOT, MILD, MEDIUM, HOT, FLAMING } ...
- PL/SQL Developer 破解方法~
1.有注册码的方式:亲自测试,立马见效 LicenseNumber : 999 productCode : 46jvnzf74ysf3mqm4hx4tvhcamh8gpe3v5 SeriesNumbe ...
- bugku题目“cookie欺骗”
先上成功截图 题目写的cookie欺骗,但其实是一道考察写脚本能力和代码审计类的题目,首先观察开始的页面 可以看到只有这一串字母,粗略观察可以认为这绝对不是密码,而是胡乱写上的字符,在观察页面源代码后 ...