进度指示提供更好的用户体验的一种方式

Windos 10 在系统中提供了有进度指示的土司通知,可以帮助开发者开发更好的用户体验。

在上一篇文章,我介绍了一种为复制提供进度的方法,下面我将介绍,如何将进度与通知结合。

在上一篇文章的类中添加以下两个方法

(using Microsoft.Toolkit.Uwp.Notifications;)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
public void SentToast()
{
ToastContent content = new ToastContent()
{
Visual = new ToastVisual()
{
BindingGeneric = new ToastBindingGeneric()
{
Children =
{
new AdaptiveText()
{
Text = new BindableString("cuurrentfile")
},

new AdaptiveProgressBar()
{
Title = "Copy",
Value = new BindableProgressBarValue("progressValue"),
ValueStringOverride =new BindableString("progressValueString"),
Status =new BindableString("progressStatus")
}
}
}
}
};

// Generate the toast notification
var toast = new ToastNotification(content.GetXml())
{

// Assign the tag and group
Tag = Source.Path,
Group = "Copy",

// Assign initial NotificationData values
// Values must be of type string
Data = new NotificationData()
};
toast.Data.Values["progressValue"] = "0";
toast.Data.Values["progressValueString"] = "/ ";
toast.Data.Values["progressStatus"] = "Copying...";
toast.Data.Values["cuurrentfile"] = "";
// Provide sequence number to prevent out-of-order updates, or assign 0 to indicate "always update"
toast.Data.SequenceNumber = 1;

// Show the toast notification to the user
ToastNotificationManager.CreateToastNotifier().Show(toast);
}

public void UpdateProgress()
{
// Construct a NotificationData object;
string tag = Source.Path;
string group = "Copy";

// Create NotificationData and make sure the sequence number is incremented
// since last update, or assign 0 for updating regardless of order
var data = new NotificationData
{
SequenceNumber = 2
};

// Assign new values
// Note that you only need to assign values that changed. In this example
// we don't assign progressStatus since we don't need to change it
data.Values["progressValue"] = (CurrentProgress/100).ToString();
data.Values["progressValueString"] = fileID+1+"/"+filecount+"files";
data.Values["cuurrentfile"] = CurrentFileName;
data.Values["progressStatus"] = CurrentCopyStatus.ToString();
// Update the existing notification's data by using tag/group
ToastNotificationManager.CreateToastNotifier().Update(data, tag, group);
}

一个用来创建通知,一个用来更新

将通知的值设定为BindableProgressBarValue或者BindableString使数据可以更新

在更新方法中设定对应的值就可以更新通知(替换)

更新或替换通知

从 Windows 10 开始,始终可以通过使用相同的 TagGroup 发送新 Toast 来替换通知。 那么替换 Toast 和更新 Toast 的数据之间有何区别?

替换

更新

在操作中心中的位置

将通知移动到操作中心的顶部。

将通知就地保留在操作中心内。

修改内容

可彻底更改 Toast 的全部内容/布局

仅可更改支持数据绑定的属性(进度栏和顶级文本)

作为弹出窗口重新出现

如果保持 SuppressPopup 的设置为 false(或设置为 true 以自动将其发送到操作中心),则可以作为 Toast 弹出窗口重新出现

不会作为弹出窗口重新出现;在操作中心内自动更新 Toast 的数据

用户已消除

无论用户是否消除上一个通知,将始终发送用于替换的 Toast

如果用户已消除 Toast,将无法更新 Toast

一般情况下,更新可用于…

  • 在短时间内经常更改且不需要引起用户注意的信息
  • Toast 内容的细微更改,如将 50% 更改为 65%

通常情况下,更新序列完成(如文件已下载)之后,建议替换最后一步,因为…

  • 最终的通知很可能会有较大的布局更改,如删除进度栏、添加新按钮等
  • 用户可能会消除待处理的进度通知,因为用户不一定要监视下载进程,而是希望在操作完成时通过弹出 Toast 获取通知

https://docs.microsoft.com/zh-cn/windows/uwp/design/shell/tiles-and-notifications/toast-progress-bar