WINDOWS 10 2015 年特别版
此文章由机器翻译。
# 通知 - Windows 10 中的自适应和交互式通知
通过 [Thomas Fennel](https://msdn.microsoft.com/zh-cn/magazine/mt149362?author=Thomas+Fennel) |Windows 2015 年
在开发人员的工具箱影响用户实施中的几个工具喜欢通知。它们是否渗透到操作系统中的体验 Windows mobile、 Windows 桌面上,Xbox 或甚至 HoloLens。没有通知向用户提供不可否认诱饵。从帮助完成某项任务例如回复输入一条消息,与提供简单和及时信息,如新闻标题和甚至取悦他们提供它们实际上并不希望的体验 — 例如 Cortana 提醒 — 通知向用户提供值和与您的应用程序对它们进行沟通。
## 什么是 Windows 中的通知?
通知表示多种类别的整个操作系统的用户合作。从用户的角度来看,通知都包含在许多体验。
图块是最图标的窗体的通知的 Windows 操作系统。您在其他外观造型和设备类型在 Windows 桌面和移动和在各种情形下的开始屏幕上看到磁贴。图块向用户提供以下几个好处。
首先,它们是启动应用程序使用主磁贴的快速方法 — 这些是您从固定应用程序列表直接到开始接触和待定或右键单击列表中的应用程序的磁贴。它们还作为一种方法以获取直接对内容使用辅助磁贴的应用程序中更深入地 — 这些都是一名开发人员会与用户同意的情况下从应用程序中以编程方式固定磁贴。
可以说是更重要的是图块能够通过该磁贴本身,通过动态磁贴提供从应用程序中的内容中提供与客户合作。这些为您提供一种方法来访问用户没有它们实际启动您的应用程序 — 正在天气预报和您最喜欢的团队的赛事比分老套的示例。获取该信息快速地在开始菜单上的一个地方可以取悦用户。
Toast 是在移动设备的顶部或右下角的桌面屏幕弹出通知。它们是查找让用户与应用程序通过启动它的中断通知。在 Windows 10 之前点击 toast 通知可能仅启动用户到应用程序与开发人员在创建通知时无法设置某些静态参数。此外,在 Windows 10 之前没有移动通知称为警报和创建用户不得不在干别的事情之前做出响应的较大的模式对话框的提醒。这两个类似于 toast,并已被融入调用操作所需的 Toast 通知的类别。
徽章是通知的最终类型。您所处位置通常在应用程序中的丢失项的计数在锁屏上主要看到徽章。有时它们表示状态的小标志符号或者 — 思考的感叹点或其他类似。在主和辅助磁贴还表示徽章。
## 如果东西还没坏,问题就不用修理
当我们开始研究自适应和交互式通知时,我们已卖力根据我们听到有关的状态的同时在 Windows Phone 和 Windows 8 上的通知开发人员社区的反馈。我们不想创建新的东西只是因为...我们曾经所有生活所在,通过在过去,它是我们如何得到与此类大通知技术、 基础结构和 Windows Phone 和 Windows 桌面之间的开发人员模型之间的差异。而是面向 Windows 10 我们侧重于开发人员喜欢有关这两个平台中的现有通知框架和作出这样做的时候我们需要,而不是简单地尝试完全摆脱我们旧的承诺。因为我们不只启动 Windows 10 是有趣的时候,我们也已集成到一个平台团队的 Windows Phone 和 Windows 团队。在这一转换,它不能总是轻松地采用此类原则性方法,但我们知道它是国际义人将这两个领域的最佳组合在一起,并将该结果 — 自适应和交互式通知表示"一个 Microsoft"方法。
## 不能缩放磁贴和 Toast 模板目录
开发人员那如何设计这些磁贴和 toast 通知? 以前版本的 Windows 有灵活性相对较差的一系列模板我们将放入该磁贴和 toast 模板目录。这些模板允许开发人员能够轻松、 经济地创建视觉上与 Windows 设计语言一致的通知。但是,若要创建的映像和开发人员可能想的文本配置的所有可能排列,我们最终建立数百个几乎完全相同的模板。
图 1 列举了我们在 Windows Phone 8.1 和 Windows 8.1 中提供的磁贴目录。Text01 是单个行中使文本换行。Text02 是非换行文本的四个单独的行。Text03 是具有单个行中使文本换行的标头。Text04 是具有三行非换行文本的标头。这些显然不会扩展到开发人员可能希望每个可能组合。
![](https://box.kancloud.cn/2016-01-08_568f406f0a565.png)
图 1 从磁贴模板的四个模板目录中提供样式和布局中只有细微的差异
例如,如果您需要两行文本换行吗? 遗憾的是,这并不是目录的一部分这样说来使用仅限映像的模板和呈现自定义位图。但是,从而会产生模糊文本时缩放到不同的分辨率要高得多的数据使用情况时在后台任务中生成位图时从云,以及对性能的影响和不可靠,无法下载。
因为存在实际上只有两个样式,toast 是问题甚至多多。没有从技术上讲八个模板,但它们细分到 toast 与映像或映像,而 toast 中所示 图 2。从开发人员的反馈表明不只是两种布局不足够灵活 toast,没有交互式甚至以简单方式。相当于文字量较在其中显示 toast — 说三、 四行 — 无法容易地消耗在小屏幕上因为我们只介绍了前两个文本行最多。即使基本交互性如能够展开以显示更多的内容的通知不可能与现有的框架。
![](https://box.kancloud.cn/2016-01-08_568f406f2e1a8.png)
![](https://box.kancloud.cn/2016-01-08_568f406f7c289.png)
图 2 Toast 模板中的两个模板目录
## 不是每个开发人员 (或可以承受) 若要创建丰富的通知
模板解决重要的问题,因为设计、 开发和测试自定义绘制如动态磁贴通知是具有挑战性且成本高昂。我们通知的平台上的各种外观造型和屏幕密度运行和我们支持五个不同的平铺大小和两个 toast 大小,其中所有需要自定义设计、 开发和测试。模板可以因为想要创建通知我们模板语言适合开发人员可以受益最少的开发成本和几乎为零测试成本来缓解这一困难并我们采用以确保它们看起来将其既美观又具备跨所有屏幕的负担。
开发人员无需担心边距、 填充、 字体大小或权重 ;他们可以通过粘贴一些 xml 并更改某些 特性创建既美观又具备并与我们的语言一致的内容。
一次是功能强大需要提供一些灵活的开发人员集成带有其自己的品牌的内容。开发人员花费大量资金和时间创建独特的外观和生成的品牌得以吸引用户。突出显示该品牌是工作的我们项核心原则构建。
## 这对于模板意味着什么?
Windows 10 中的模板有效地服务于只有一个主要用途: 若要针对特定的磁贴大小。在 Windows 10 桌面和移动,我们有小型、 中型和宽磁贴。在桌面中我们还提供其他大小对于大型的图块。我们认为这些磁贴在逻辑 4-units-wide-by-4-units-high 网格方面。较小的磁贴在该网格上占据 1 x 1 单位 — 小方块,真正 — 因此较小的名称。中等磁贴占用该网格中或中等方块上的 2 x 2 单位。是否理解一种趋势吗? 宽磁贴是在该网格中的 4 x 2 单位和大型的图块是完整的 4x4 单位。
我们已在设计时自适应和交互式通知,我们得出的结论是我们可以采取各种措施来折叠到只是大小的关键核心的目录。我们最终建立用于磁贴的只有四个模板 — TileSmall、 TileMedium、 TileWide 和 TileLarge — 和一个用于 toast 模板: ToastGeneric。在将来我们希望进一步折叠和具有内容所在之间所有磁贴大小相同的方案的 TileGeneric 模板。然后开发人员可以只是提供一个模板用于其磁贴。
在以前版本的 Windows 中,模板还提供定义动画特征的整个图面。必须以显示图像通过它循环访问集合的动画的图块将具有其自己的模板。同样,若要显示的缩略图一次设置动画效果和淡入集合所需的图块需要另一个模板。现在动画的处理也是通过对新的提示-* 我们引入了,我稍后将讨论其中的属性。
即使有了所有这些我们将不要弃用的旧模板目录。如果开发人员无需更改的服务器或用于构造其通知客户端代码升级到新通用 Windows 平台 (UWP) Windows 10 中,应用程序将继续工作在 Windows 10 mobile 上的出色和桌面。事实上,一些以前不起作用一致地或根本移动和桌面之间现在很好地工作。例如,正确地在 Windows Mobile 10 上使用任何 ToastImageAndText0 * 模板其中该层以前被省略的通知中显示的图像。
## 自适应和交互式通知
Windows 10 中我们发展我们通知的故事来通过引入三个主要功能提供更丰富的开发人员体验和用户体验。
第一种是自适应磁贴/toast,它提供一个灵活的架构来生成更直观地丰富的通知并使其在不同外观造型自适应显示。
第二个是交互式的 toast,提供一种简单的交互创建 toast 通知,这样用户可以执行快速的操作或通知中的嵌入式答复而无需激活该应用程序并要求用户从他们当前的操作的上下文切换的方法。
第三个是允许应用程序订阅有关 toast 通知的历史记录更改的事件以便时由系统还是用户处理其自己的 toast 通知应用程序可以获得通知。实质上这是一种方法要了解为其应用程序在操作中心内已更改的内容。
## 自适应动态磁贴和操作中的自适应和交互式 Toast 通知
我将使用新的自适应和交互式通知来演示如何构建展示磁贴的关键方面,并且使用实际的应用场景的 toast 的典型项目。具体而言,我将简要介绍可以使用电子邮件应用程序中的新通知的类型。
我将从开始您的电子邮件应用程序的磁贴。如何创建该磁贴本身,通过您的主磁贴的应用程序清单或通过辅助磁贴的 Api,根据我们您尚未在进行任何重大更改时在 Windows 10 版本中,因此我不打算深入了解如何执行这些操作,因为它们已经存在完备。磁贴和 toast 布局定义是使用语义的 XML 架构,通常称为通知负载。实际上,我将关注上为图块是如何创建使用新的外观更丰富的磁贴体验磁贴模板和相应的 XML 负载。
我将创建新的电子邮件通知控件为用户显示的自适应的磁贴通知。吸引用户的最好方式是文本的为其提供的新消息由于最后一次打开它们结合使用的应用程序的消息是文本的从与之进行计数和几行中的电子邮件正文。图 3 显示如下 Windows 10 桌面上的所有四个大小。
![](https://box.kancloud.cn/2016-01-08_568f406f9d399.png)
图 3 小型组织、 中、 宽和大 10 的 Windows 桌面上的磁贴
图 4 描述表示中的图块的通知负载 图 3。
图 4 创建中等规模的自适应磁贴的 XML 负载
~~~
<binding template="TileMedium" branding="logo">
<group>
<subgroup>
<text hint-style="caption">Matt Hidinger</text>
<text hint-style="captionsubtle">Photos from our trip</text>
<text hint-style="captionsubtle">Check out these awesome photos
I took while in New Zealand!</text>
</subgroup>
</group>
<text />
<group>
<subgroup>
<text hint-style="caption">Lei Xu</text>
<text hint-style="captionsubtle">Build 2015 Dinner</text>
<text hint-style="captionsubtle">Want to go out for dinner after
Build tonight?</text>
</subgroup>
</group>
</binding>
~~~
有几个有意思的操作中需要注意 图 4。
首先,仅显示中等磁贴,看到在 TileMedium 绑定中,因为所有四种大小的 XML 相当长的负载。以重新生成所示的所有图块 图 3, ,将需要也使用 TileSmall、 TileWide 和 TileLarge 模板,虽然它们具有每个非常相似的内容。您可以将所有这些绑定到一个通知负载。
其次,是实际的通知中的内容不是在该图块上显示。您可以看到这由两个不同组的 和 标记表示。为什么会这样呢? 因为此图块可能会显示在多个屏幕密度,因此我提供了详细信息以防它获取可显示更多的内容的高密度屏幕上显示。 和 标记可帮助系统可以知道哪些内容要放置在一起在语义上使事情不会剪切掉奇怪放置 — 它是您的方法来描述您想要尽量将显示在一起的信息"单元"。
要注意的第三个问题是在负载中间本身悬挂的文本元素。这是实际指定一个简单的空行的方式在大型磁贴示例中可以看到。
最后的提示-* 可以在此负载中看到我之前提到的元素。这些是全新的灵活性我们引入了可帮助您执行某些操作 (如中所示的简单文本样式有很大一部分 图 5。大量的提示,您可以指定图像的不透明度等内容、 裁剪和偶数就应该的是个人资料照片如何进行动画处理图块上的项的某些特定环境。在 MSDN 博客上提供了可用提示及其他图块详细信息的详细信息 [bit.ly/1NYvsbw](http://bit.ly/1NYvsbw)。
![](https://box.kancloud.cn/2016-01-08_568f406fb81f6.png)
图 5 在左侧,而不是在右侧的高密度屏幕低密度的屏幕上的中等磁贴
若要进一步说明有关的信息密度,这一点 图 5 是举例说明如何从负载 图 4 低密度高密度屏幕与屏幕上显示。我知道似乎中等磁贴旁边大型的磁贴,但在现实生活中的表示形式通常在价格更低的旗舰产品手机上找到一个高密度屏幕与手机上找到一个低密度的屏幕上的中等磁贴。
现在我将转到第二个有趣和有吸引力所无法做的事情,这次是使用具有自适应性并交互式 toast 通知。同样,与该磁贴 Api,在您创建的 toast 通告程序和 toast 对象的方法中为 nothing 已更改 toast Api 中。就像磁贴,什么是真正新增此处是可以使用这些 Api 使用的负载。
您可以创建当接收到新的电子邮件时显示并为用户提供了一些即刻这两个,从而几行文本从电子邮件和几个简单的快速操作要在电子邮件自身上执行一个 toast 通知。两个人们做封电子邮件中的最常见的事情是要将项目标记为已读,因此它们无需在更高版本,请参阅其邮件列表中和立即删除邮件时再次行业关注它。在 Windows 10 桌面上,这种 toast 通知将如下所示 图 6。
![](https://box.kancloud.cn/2016-01-08_568f406fda3c5.png)
图 6 具有自适应性并交互式 Toast 可能会看到电子邮件应用程序使用
中的 XML 图 7 就会生成通知中所示 图 6。
图 7 自适应和交互式 Toast 可能会看到电子邮件应用程序使用
~~~
<toast>
<visual>
<binding template="ToastGeneric">
<text>Andrew Bares</text>
<text>Ideas for blog posts and the template visualizer.</text>
<text>Hey guys, I've got some great ideas for the blog and
some feature ideas for the...</text>
<image placement="AppLogoOverride" hint-crop="circle" src="AndrewBares.png" />
</binding>
</visual>
<actions>
<action activationType="background" content="Mark Read" arguments="read" />
<action activationType="background" content="Delete" arguments="delete" />
</actions>
<audio src="ms-winsoundevent:Notification.Mail"/>
</toast>
~~~
如使用磁贴通知负载前所示,有一些有趣的新问题要注意从 toast 负载中 图 7, ) 以及。
首先,与不同的是以前的模板,您可以自由地指定文本元素并他们并不需要其自己的 Id。我创建了三行文本 toast 通知中使用三个单独的文本元素。
其次,请注意第一行文本加粗而不是所有后续行。现在,您不能使用所有的提示-* 因此此文本样式始终之前将一直应用 toast 为将来的版本在那里我们会在启用更多提示和样式 toast 文本中显示 toast、 磁贴通知上可用的样式。但是,您可以使用一些提示。例如,请注意该提示裁剪属性运作此处我可裁剪 Andrew 通过使用它在组合中,我可以 AppLogoOverride 放置属性显示为一个很好的圆圈的图像来代替能够正常显示应用程序徽标图像。可用的提示和其他 toast 通知的详细信息的详细信息可在 MSDN 博客上[bit.ly/1N3o7GY](http://bit.ly/1N3o7GY)。
最后,在负载操作部分中,请注意如何有使用电子邮件执行常见任务的人员使用单个操作元素创建的两个按钮。参数是应用程序在单击按钮和调用应用程序时将收到。在这种情况下,我使用背景 activationType 因为我想要处理这些操作在应用程序的后台任务。或者,您可以让如果您想要启动该应用程序无法完成该操作的前景 activationType 或协议 activationType 如果您想要调用某个 Web 站点或通过标准协议启动应用程序到应用程序进行通信。
现在,我已创建显示通知所需的 XML 负载,我需要处理上此交互式 toast 通知的用户所采取的操作。
若要启动,因为我选择背景 activationType,我需要我可以在其中执行代码的后台任务。该任务需要在应用程序 Package.appxmanifest,声明中所示 图 8。
![](https://box.kancloud.cn/2016-01-08_568f4070095a7.png)
图 8 声明后台任务以处理在 Package.appxmanifest 中的交互式 Toast 操作
然后,一旦在 Package.appxmanifest 中注册该任务,您可以将代码添加到您的后台任务来实际处理用户操作。在 图 9 您可以看到可将您自己的代码来处理操作的简单存根。
图 9 句柄参数或后台任务中的用户输入
~~~
namespace Tasks
{
public sealed class ToastHandlerTask : IBackgroundTask
{
public void Run(IBackgroundTaskInstance taskInstance)
{
// Retrieve and consume the pre-defined arguments and user inputs here.
var details = taskInstance.TriggerDetails as NotificationActionTriggerDetails;
var arguments = details.Arguments;
// Handle either marking the mail as read or deleting it from the database.
}
}
}
~~~
现在您有应用程序可以动态地在您的图标上显示吸引人视觉的内容和加入针对其最快速的用户通常所需的操作使用 toast。您的应用程序是更有用且很不一般吧给用户,并且它们可以快速获取新信息和不需要在从当前做了什么应用程序的上下文切换与您的体验进行交互。我们期待到一些令人称奇你将需要执行操作并真诚期望您将 Windows 10 中获得更好的用户合作到自适应和交互式通知中。
* * *
Thomas Fennel *是首席项目经理会导致在 Microsoft 在 Windows 开发人员生态系统和平台部门。与他联系 [tfennel@microsoft.com](mailto:tfennel@microsoft.com)。*
- 介绍
- Microsoft .NET - .NET 和通用 Windows 平台开发
- 图形和动画 - Windows 组合支持 10 倍缩放
- 应用生命周期 - 通过后台任务和扩展执行使应用处于活动状态
- 通知 - Windows 10 中的自适应和交互式通知
- 应用集成 - 在 Windows 10 上链接和集成应用
- Visual Studio 工具 - NuGet 功能增强了 Windows 10 的开发功能
- UI 设计 - 通用 Windows 应用的响应式设计
- UI 设计 - 适用于 Windows 10 的自适应应用
- 数字墨迹 - Windows 10 中的墨迹交互
- 游戏开发 - 使用 Unity 为通用 Windows 平台编写游戏
- 结束语 - 欢迎使用 Windows 10 应用开发
- 编者寄语 - 从 3.0 开始的发展之路