使用应用通知内的进度栏,可以向用户传达长时间运行的操作的状态,例如下载、视频呈现、练习目标等。
应用通知中的进度栏可以是“不确定的”(没有特定值,使用动画点指示正在进行的操作)或“确定的”(显示填充条的特定百分比,如 60%)。
下图显示了一个确定型进度条,其中标记了其所有对应的属性。
有关应用通知的详细信息,请参阅 应用通知概述。
| 财产 | 类型 | 必需 | 说明 |
|---|---|---|---|
| 标题 | 字符串 或 BindableString | 假 | 获取或设置可选的标题字符串。 支持数据绑定。 |
| 价值 | double 或 AdaptiveProgressBarValue 或 BindableProgressBarValue | 假 | 获取或设置进度栏的值。 支持数据绑定。 默认值为 0。 可以是介于 0.0 和 1.0 之间的双精度,AdaptiveProgressBarValue.Indeterminate,或者是 new BindableProgressBarValue("myProgressValue")。 |
| ValueStringOverride | 字符串 或 BindableString | 假 | 获取或设置要显示的可选字符串,而不是默认百分比字符串。 如果未提供此项,将显示“70%”之类的内容。 |
| 状态 | 字符串 或 BindableString | 是 | 获取或设置状态字符串(必需),该字符串显示在左侧进度栏下方。 此字符串应反映操作的状态,例如“正在下载...”或“正在安装...” |
使用 AppNotificationBuilder.AddProgressBar 向通知添加进度栏。 以下示例生成上面所示的通知。
var builder = new AppNotificationBuilder()
.AddText("Downloading your weekly playlist...")
.AddProgressBar(new AppNotificationProgressBar()
.SetTitle("Weekly playlist")
.SetValue(0.6)
.SetValueStringOverride("15/26 songs")
.SetStatus("Downloading..."));
若要动态更新进度栏的值,请使用下一部分中所述的数据绑定。
使用数据绑定更新进度栏
若要显示实时进度栏,请使用数据绑定更新通知值,而无需重新发送整个通知。
- 通过在
Bind上调用方法,使用数据绑定字段构造通知内容。 - 分配 标记 (以及(可选) 组以标识通知。
- 设置初始 AppNotificationProgressData 值。
- 通过调用 AppNotificationManager.Default.Show 来显示通知。
using Microsoft.Windows.AppNotifications;
using Microsoft.Windows.AppNotifications.Builder;
string tag = "weekly-playlist";
string group = "downloads";
var builder = new AppNotificationBuilder()
.AddText("Downloading your weekly playlist...")
.AddProgressBar(new AppNotificationProgressBar()
.BindTitle()
.BindValue()
.BindValueStringOverride()
.BindStatus());
var notification = builder.BuildNotification();
notification.Tag = tag;
notification.Group = group;
notification.Progress = new AppNotificationProgressData(1)
{
Title = "Weekly playlist",
Value = 0.6,
ValueStringOverride = "15/26 songs",
Status = "Downloading..."
};
AppNotificationManager.Default.Show(notification);
然后,使用新的 AppNotificationProgressData 实例调用 AppNotificationManager.Default.UpdateAsync 来更新进度值。 增加序列号,使平台知道这是一个更新版本。
using Microsoft.Windows.AppNotifications;
string tag = "weekly-playlist";
string group = "downloads";
var data = new AppNotificationProgressData(2)
{
Value = 0.7,
ValueStringOverride = "18/26 songs"
};
await AppNotificationManager.Default.UpdateAsync(data, tag, group);
使用 UpdateAsync 而不是替换整个通知可确保通知在通知中心保持相同的位置,并且不会向上或向下移动。 该方法返回一个 NotificationUpdateResult ,该值指示更新是成功还是找不到通知(用户可能已将其关闭)。
支持数据绑定的元素
应用通知中的以下元素支持数据绑定:
- AppNotificationProgressBar 上的所有属性
- 顶级文本元素上的 Text 属性
更新或替换通知
可以通过发送带有相同标记和组的新通知来替换一个通知。 下表描述了替换和更新通知之间的差异。
| 替换 | 更新 | |
|---|---|---|
| 通知中心中的位置 | 将通知移动到通知中心顶部。 | 将通知保留在通知中心内。 |
| 修改内容 | 可以完全更改通知的所有内容和布局。 | 只能更改支持数据绑定的属性(进度栏和顶级文本)。 |
| 重新出现为弹出窗口 | 如果 SuppressPopup 为 false (或设置为 true 以无提示方式将其发送到通知中心),则可以重新显示为弹出窗口。 |
不会作为弹出窗口重新出现;通知的数据在通知中心内以无提示方式更新。 |
| 用户已消除 | 无论用户是否关闭了以前的通知,都始终发送替换通知。 | 如果用户关闭通知,更新将失败。 |
通常, 更新 对于频繁更改且不需要用户立即注意的信息非常有用,例如将进度从 50% 更改为 65%。
更新序列完成后(例如,文件已完成下载),请考虑 替换 最后一步的通知,因为:
- 最终通知可能具有不同的布局,例如删除进度栏或添加新按钮。
- 用户可能已关闭进度通知,但仍希望在操作完成时看到弹出窗口。