将应用固定到任务栏

你可以通过编程方式将自己的应用固定到任务栏上,就像将应用固定到“开始”菜单一样。 你可以检查应用当前是否已固定,以及任务栏是否允许固定。

Screenshot of a Windows 11 task bar showing the app pinned there.

重要

需要 Fall Creators Update:目标必须为 SDK 16299,并且必须运行版本 16299 或更高版本才能使用任务栏 API。

重要的 APITaskbarManager 类

应该何时请求用户将你的应用固定到任务栏?

利用 TaskbarManager 类,你可以请求用户将你的应用固定到任务栏;用户必须批准该请求。 你尽了很大努力来构建一流的应用,现在你有机会请求用户将其固定到任务栏。 但在我们深入探讨代码之前,你在设计体验时需要牢记以下几点:

  • 务必使用明确的“固定到任务栏”行动号召在应用中制作无干扰并且可轻松消除的 UX。 为此,请避免使用对话框和浮出控件。
  • 务必在要求用户固定应用前明确解释你的应用值。
  • 如果磁贴已经固定或设备不支持磁贴,不要请求用户固定应用。 (本文说明如何确定是否支持固定。)
  • 不要反复要求用户固定你的应用(用户可能会生气)。
  • 没有显式用户交互或当你的应用最小化/未打开时不要调用固定 API。

1. 检查是否存在所需的 API

如果你的应用支持较旧的 Windows 10 版本,则需要检查 TaskbarManager 类是否可用。 你可以使用 ApiInformation.IsTypePresent 方法执行此检查。 如果 TaskbarManager 类不可用,请避免执行任何 API 调用。

if (ApiInformation.IsTypePresent("Windows.UI.Shell.TaskbarManager"))
{
    // Taskbar APIs exist!
}

else
{
    // Older version of Windows, no taskbar APIs
}

2. 检查任务栏是否存在并允许固定

Windows 应用可以在各种设备上运行;并非所有设备都支持任务栏。 现在,仅桌面设备支持任务栏。

即使任务栏可用,用户计算机上的组策略也可能会禁用任务栏固定。 因此,尝试固定应用之前,你需要检查是否支持固定到任务栏。 如果任务栏存在并且允许固定,则 TaskbarManager.IsPinningAllowed 属性 会返回 True。

// Check if taskbar allows pinning (Group Policy can disable it, or some device families don't have taskbar)
bool isPinningAllowed = TaskbarManager.GetDefault().IsPinningAllowed;

注意

如果你不希望将应用固定到任务栏,只是想了解任务栏是否可用,请使用 TaskbarManager.IsSupported 属性

3. 检查应用当前是否已固定到任务栏

显然,如果应用已固定到任务栏,则请求用户允许你将应用固定到任务栏毫无意义。 你可以在请求用户之前使用 TaskbarManager.IsCurrentAppPinnedAsync 方法检查应用是否已固定。

// Check whether your app is currently pinned
bool isPinned = await TaskbarManager.GetDefault().IsCurrentAppPinnedAsync();

if (isPinned)
{
	// The app is already pinned--no point in asking to pin it again!
}
else 
{
	//The app is not pinned. 
}

4. 固定应用

如果任务栏存在且允许固定,并且当前未固定你的应用,则你可能需要显示一条巧妙的提示,让用户知道他们可以固定你的应用。 例如,你可以在用户能够单击的 UI 中的某个地方显示固定图标。

如果用户单击你的固定建议 UI,则将调用 TaskbarManager.RequestPinCurrentAppAsync 方法。 此方法会显示一个对话框,并请求用户确认他们想要将你的应用固定到任务栏。

重要

这必须从前台 UI 线程中进行调用,否则将出现异常。

// Request to be pinned to the taskbar
bool isPinned = await TaskbarManager.GetDefault().RequestPinCurrentAppAsync();

Pin dialog

此方法会返回一个布尔值,指明你的应用现在是否已固定到任务栏。 如果你的应用已固定,则此方法会立即返回 True,而不向用户显示对话框。 如果用户在对话框中单击“否”或者不允许将你的应用固定到任务栏,则此方法会返回 False。 相反,如果用户单击“是”并且固定了应用,则 API 将返回 True。

资源