使用 TileNotifications Pack 创建 Windows 应用商店实时磁贴。






4.95/5 (6投票s)
展示如何轻松地使用 TileNotifications pack 创建实时磁贴。
磁贴是 Windows 应用商店应用程序在 Windows 8 主屏幕上的呈现方式。 这些磁贴可以有各种大小,并根据通知显示实时内容。 实时内容可以是文本、图像或两者的各种组合。 本文解释了如何创建实时磁贴,以及 TilesNotification Pack 如何简化此过程。
使用 XML
用于创建实时磁贴更新的通知是 XML 文档,它们指定通知模板、其内容和其他各种视觉属性(例如语言或品牌推广方案)。 但是,为了向您的磁贴发送通知,您必须执行一些额外的工作
- 为您的应用程序创建一个单独的 Windows 运行时组件
- 实现
IBackgroundTask
接口以创建一个更新应用程序磁贴的组件 - 更新应用程序的程序包清单,并添加一个新的后台任务声明,引用新创建的后台任务
这些细节超出了本文的范围,并在 MSDN 中进行了详细阐述:快速入门:从后台任务更新实时磁贴。
实时磁贴可以有各种大小:普通(150x150 像素)、宽(310x150 像素)和大(310x310 像素)。 对于这些支持的尺寸,有各种模板,带有文本和图像的组合(其中一些已在 Windows 8.1 中被弃用,并且可能在未来的 Windows 版本中不可用)。 Windows 应用商店应用程序可以支持所有这三种实时磁贴尺寸,但只能为每种尺寸定义一个模板。
要查看所有可用的磁贴模板,请查看 磁贴模板目录。
以下 C# 代码示例演示了如何为宽(310x150)磁贴创建通知。 请注意
- 您必须为应用程序创建一个磁贴更新程序组件
- 为通知创建 XML 文档。 这通常通过检索可用模板之一的 XML 文档,然后更改 DOM 来完成。
- 从磁贴 XML 创建一个
TileNotification
对象,并使用它来更新磁贴
const string textElementName = "text";
const string imageElementName = "image";
// Create a tile update manager for the specified syndication feed.
var updater = TileUpdateManager.CreateTileUpdaterForApplication();
updater.EnableNotificationQueue(true);
updater.Clear();
var imgsrc = new string[] {
"ms-appx:///Images/image1.png",
"ms-appx:///Images/image2.png",
"ms-appx:///Images/image3.png",
"ms-appx:///Images/image4.png",
"ms-appx:///Images/image5.png",
};
for (int i = 0; i < 5; ++i)
{
try
{
// wide 310x150
var tileXml = TileUpdateManager.GetTemplateContent
(TileTemplateType.TileWide310x150ImageAndText01);
tileXml.GetElementsByTagName(textElementName)[0].InnerText =
string.Format("this is notification #{0}", i+1);
var image = tileXml.GetElementsByTagName(imageElementName).FirstOrDefault();
if (image != null)
{
var src = tileXml.CreateAttribute("src");
src.Value = imgsrc[i];
image.Attributes.SetNamedItem(src);
}
updater.Update(new TileNotification(tileXml));
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
}
以这种方式创建磁贴通知太明确,当您想支持多种磁贴尺寸(通常是这种情况)时会变得很麻烦,尤其是在磁贴模板具有许多元素(其中一些具有 20 多个文本和/或图像元素)时。 在这种情况下,磁贴文档的 visual
元素必须具有多个绑定。 下一个示例显示了如何为两个磁贴(一个普通磁贴和一个宽磁贴)创建通知。
// wide 310x150
var tileXml = TileUpdateManager.GetTemplateContent
(TileTemplateType.TileWide310x150ImageAndText01);
tileXml.GetElementsByTagName(textElementName)[0].InnerText =
string.Format("this is notification #{0}", i+1);
var image = tileXml.GetElementsByTagName(imageElementName).FirstOrDefault();
if (image != null)
{
var src = tileXml.CreateAttribute("src");
src.Value = imgsrc[i];
image.Attributes.SetNamedItem(src);
}
// square 150x150
var squaredTileXml = TileUpdateManager.GetTemplateContent
(TileTemplateType.TileSquare150x150Text04);
squaredTileXml.GetElementsByTagName(textElementName)[0].InnerText =
string.Format("this is notification #{0}", i+1);
var binding = tileXml.ImportNode(squaredTileXml.GetElementsByTagName("binding")[0], true);
tileXml.GetElementsByTagName("visual")[0].AppendChild(binding);
updater.Update(new TileNotification(tileXml));
使用 TileNotifications Pack
Tileotifications pack 是一个小型开源项目,可在 Codeplex 上获得,它提供了一组 .NET 类,使开发人员能够以比上述更简单、更安全的方式为 Windows 应用商店应用程序创建磁贴通知。 您无需创建或更新 XML 文档,而是以您习惯的面向对象的方式创建对象和对象集合。
下面的示例展示了如何为普通、宽和大尺寸的磁贴创建通知。
var updater = TileUpdateManager.CreateTileUpdaterForApplication();
updater.EnableNotificationQueue(true);
updater.Clear();
var imgsrc = new string[] {
"ms-appx:///Images/image1.png",
"ms-appx:///Images/image2.png",
"ms-appx:///Images/image3.png",
"ms-appx:///Images/image4.png",
"ms-appx:///Images/image5.png",
};
for (int i = 0; i < 5; ++i)
{
try
{
var tiles = new TileCollection()
{
new TileSquare150x150Image() {
Binding = new TileBinding() { Branding = TileBranding.name },
Image = new TileImage() { Src = imgsrc[i], Alt = imgsrc[i] }
},
new TileWide310x150ImageAndText01(){
Image = new TileImage() { Src = imgsrc[i], Alt = imgsrc[i] },
Text = string.Format("this is notification #{0}", i+1)
},
new TileSquare310x310ImageAndTextOverlay02() {
Binding = new TileBinding() { Branding = TileBranding.none },
Image = new TileImage() { Src = imgsrc[i], Alt = imgsrc[i] },
Text = string.Format("this is notification #{0}", i+1),
Text2 = string.Format("and this is a description for notification #{0}", i+1)
}
};
updater.Update(tiles);
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
}
以下是实时磁贴可能的外观
要使用该包,您只需添加对程序集 TileNotificationsPack.dll 的引用。
该包定义了
- 代表可用磁贴模板的类集合(例如
TileSquare150x150Image
、TileSquare310x310ImageAndTextOverlay02
等,都派生自Tile
类) - 用于定义其他视觉属性的类(例如
TileBranding
) TileUpdater
扩展方法,用于从Tile
或Tile
对象集合更新磁贴。
附加阅读材料
- 使用磁贴、徽章和 Toast 通知(使用 JavaScript 和 HTML 的 Windows 应用商店应用)
- 快速入门:发送磁贴更新(使用 JavaScript 和 HTML 的 Windows 应用商店应用)
- 磁贴和磁贴通知概述(Windows 应用商店应用)
- 快速入门:从后台任务更新实时磁贴
- 磁贴架构
- 创建出色的磁贴体验(第 1 部分)
历史
- 2013 年 12 月 20 日:初始版本