[源码下载]

背水一战 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 基础的更多相关文章

  1. 背水一战 Windows 10 (109) - 通知(Tile): 按计划显示 tile 通知, 轮询服务端以更新 tile 通知

    [源码下载] 背水一战 Windows 10 (109) - 通知(Tile): 按计划显示 tile 通知, 轮询服务端以更新 tile 通知 作者:webabcd 介绍背水一战 Windows 1 ...

  2. 背水一战 Windows 10 (111) - 通知(Tile): secondary tile 模板之图片, secondary tile 模板之分组

    [源码下载] 背水一战 Windows 10 (111) - 通知(Tile): secondary tile 模板之图片, secondary tile 模板之分组 作者:webabcd 介绍背水一 ...

  3. 背水一战 Windows 10 (110) - 通知(Tile): secondary tile 模板之基础, secondary tile 模板之文本

    [源码下载] 背水一战 Windows 10 (110) - 通知(Tile): secondary tile 模板之基础, secondary tile 模板之文本 作者:webabcd 介绍背水一 ...

  4. 背水一战 Windows 10 (112) - 通知(Badge): application 的 badge 通知, secondary 的 badge 通知, 轮询服务端以更新 badge 通知

    [源码下载] 背水一战 Windows 10 (112) - 通知(Badge): application 的 badge 通知, secondary 的 badge 通知, 轮询服务端以更新 bad ...

  5. 背水一战 Windows 10 (107) - 通知(Toast): 提示音, 特定场景

    [源码下载] 背水一战 Windows 10 (107) - 通知(Toast): 提示音, 特定场景 作者:webabcd 介绍背水一战 Windows 10 之 通知(Toast) 提示音 特定场 ...

  6. 背水一战 Windows 10 (106) - 通知(Toast): 通过 toast 打开协议, 通过 toast 选择在指定的时间之后延迟提醒或者取消延迟提醒

    [源码下载] 背水一战 Windows 10 (106) - 通知(Toast): 通过 toast 打开协议, 通过 toast 选择在指定的时间之后延迟提醒或者取消延迟提醒 作者:webabcd ...

  7. 背水一战 Windows 10 (105) - 通知(Toast): 带按钮的 toast, 带输入的 toast(文本输入框,下拉选择框)

    [源码下载] 背水一战 Windows 10 (105) - 通知(Toast): 带按钮的 toast, 带输入的 toast(文本输入框,下拉选择框) 作者:webabcd 介绍背水一战 Wind ...

  8. 背水一战 Windows 10 (104) - 通知(Toast): 纯文本 toast, 短时 toast, 长时 toast, 图文 toast

    [源码下载] 背水一战 Windows 10 (104) - 通知(Toast): 纯文本 toast, 短时 toast, 长时 toast, 图文 toast 作者:webabcd 介绍背水一战 ...

  9. 背水一战 Windows 10 (103) - 通知(Toast): 基础, 按计划显示 toast 通知

    [源码下载] 背水一战 Windows 10 (103) - 通知(Toast): 基础, 按计划显示 toast 通知 作者:webabcd 介绍背水一战 Windows 10 之 通知(Toast ...

随机推荐

  1. java基础 ----- 程序的调试

    --- -- 什么是程序调试 当程序出错时,我们希望可以这样 逐条语句执行程序   -----    观察程序的执行情况 ------  发现问题   -----  解决问题 但是,程序一闪就运行结束 ...

  2. webpack 模块方法

    1. webpack的import和export不需要引入babel 其他ES6语法需要引入babel 2. import引入export导出的模块 3. import()模块分离  低版本浏览器想使 ...

  3. JS判断一个数组中有无重复元素(数字)

    前段时间遇到了这个问题 也百度了很多 不过还是用自己的方法解决了 一个超级简单的方法 简单到令人发指 由于直接写文本太丑了 所以还是截图吧 嘻嘻嘻 假如有一个这样的数组 (这是假如  可能每个人的数据 ...

  4. maven学习--1.项目结构及简单使用

    1.项目目录结构 MavenProjectRoot(项目根目录)   |----src   |     |----main   |     |         |----java ——存放项目的.ja ...

  5. linux(centos) tomcat设置开机启动

    亲测有效 环境: centos7 apache-tomcat-8.5.37 设置步骤: 1.修改/etc/rc.d/rc.local vi /etc/rc.d/rc.local 2.添加下面两行脚本, ...

  6. linux中du与df的区别和联系

    1,两者区别 du,disk usage,是通过搜索文件来计算每个文件的大小然后累加,du能看到的文件只是一些当前存在 的,没有被删除的.他计算的大小就是当前他认为存在的所有文件大小的累加和. df, ...

  7. selenium+java定位163/126邮箱元素显示定位失败解决

    开始在没有进入iframe时,用任何方法定位163/126邮箱登录页面的元素都不可能定位到,eclipse工作台会显示Unable to locate element:…… 这种情况我遇到了两种原因: ...

  8. 解决拼音输入法会触发input事件的问题

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script sr ...

  9. kbmmw 5.08 正式发布

    欢迎大家围观. Important notes (changes that may break existing code)         ============================= ...

  10. SAS 分组与排序

    SAS 分组与排序 SAS对数据集进行操作时,经常需要在SET.MERGE.MODIFY或 UPDATE语句中使用分组数据.使用分组数据最基本的方法是使用BY 语句,其基本形式如下: BY 变量列表; ...