[源码下载]

背水一战 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. Ubuntu 16.04 上安装 PCL 1.8.0

    Ubuntu16.04之后安装pcl可以直接apt-get sudo apt-get install libpcl-dev pcl-tools 安装之前,准备一些依赖库 sudo apt-get up ...

  2. swift 自动布局设置 tableview 的 tableHeaderView 的高度

    class headerView: UIView { var whiteView = UIView().then { $.backgroundColor = UIColor.red } overrid ...

  3. 机器学习(五)--------正则化(Regularization)

    过拟合(over-fitting) 欠拟合 正好 过拟合 怎么解决 1.丢弃一些不能帮助我们正确预测的特征.可以是手工选择保留哪些特征,或者使用一 些模型选择的算法来帮忙(例如 PCA) 2.正则化. ...

  4. EasyUI ComboGrid 笔记(支持分页)

    业务要求: 下拉框做选择时需要展现多个字段供用户参考,由于内容可能会很多,故还需要考虑分页. 解决方案: 由于项目整体已经采用了EasyUI,在浏览了demo以后,初步考虑使用EasyUI的combo ...

  5. VSCode的使用

    前后端分离的,先打开vs,打开你的项目,在项目根目录中找到.vs文件加,找到.vs\config\applicationhost.config,然后打开找到你项目的IIS Express配置,例如:& ...

  6. go语言学习逻辑运算符if判断,iota的理解

    第一天学习go语言,首先吐槽一下,配置go语言浪费了我两个小时的时间 不是在百度,就是在百度的路上,这里介绍一下我的go语言的版本和开发平台 go语言1.12版本,之前没有用过在早的版本了首先记录一下 ...

  7. Failed to create agent because it is not close enough to the NavMesh

    主要原因是:两个相同对象navmesh点太近造成. 解决方案:通过NavMesh.SamplePosition 获得可以行走点 ;i<;i++) { , mRadius); , 3.14f); ...

  8. jQuery on() 方法 为选定已存在元素和未来元素绑定标准事件和自定义事件

    很有必要说说jQuery的on方法,这个方法存在大乾坤大奥秘,主要注意两点: 1.为已存在元素和未来元素(动态添加元素)绑定处理函数. 2.自定义一个非标准的事件并绑定处理函数. 定义和用法 on() ...

  9. 使用QML绘制界面

    1 使用QML设计登录界面 https://www.cnblogs.com/bhlsheji/p/5324871.html 2 使用QML实现下拉列表框  https://blog.csdn.net/ ...

  10. php + mysql 存入表情 【如何转义emoji表情,让它可以存入utf8的数据库】

    方法1:base_encode64 这种方法是可以,但是旧数据没有经过encode操作,取数据的时候如果统一进行decode的话,旧数据会丢失的. 1 方法2:urlencode 这个似乎可以,对没有 ...