本文档中的最佳做法可帮助你构建出色的 Windows 应用,让全球大约 15 亿台不同电脑用户满意。 本文档分为以下部分:
- 用户体验:本部分中的指南可帮助你改进应用的外观、感觉和可用性。
- 性能和基础知识:本部分中的指南可帮助你提高应用的性能和资源利用率。
- 作系统/硬件优化:本部分中的指南可帮助你针对各种硬件配置优化打包和分发。
- 应用程序发现和管理:本部分中的指南可让用户更轻松地发现、安装、更新和卸载应用。
- 辅助功能:本部分中的指南可帮助你构建可访问和包容性体验。
- 安全和隐私:本部分中的指导可帮助你缓解安全风险并满足用户的隐私需求。
用户体验 (UX)
Windows 11 提供 Windows作系统的视觉演变,可改善 Windows 的外观、感觉和可用性。 我们的研究表明,用户对 Windows 应用的期望很高:
- 期望 Windows 应用适用于完整输入范围。
- 期望设计和交互模式在当前和未来设备上的外观和感受都是原生的。
- 期望支持新式窗口化工作流和 shell 集成点。
当应用程序遵循 Windows 样式和标准 Windows 行为时,用户无需重新学习交互模式。 这种一致性使用户使用你的应用变得更加容易。 一款看起来很棒的应用可以留下出色的第一印象,而一款既易于使用又能够帮助用户实现其目标的应用会留下持久的印象。
Windows 11 以 Windows 11 设计原则为基础构建。 构建应用时遵循这些准则有助于满足客户对出色应用体验的期望。 在考虑将最新和推荐的 Windows 应用程序 UI/UX 模式合并到 Windows 应用程序中时,请关注以下五个方面:
- 版式
- UI 交互
- 视觉样式
- 窗口行为
- Shell 集成点
WinUI 3 通过其通用控件为其中许多体验和样式提供内置支持。 如果无法使用 WinUI 3,请考虑模拟我们设计工具包和 WinUI 画廊中演示的样式。
版式
Windows 应用程序在满足用户需求的各种配置上运行。 在各种维度、设备、窗口大小、DPI 设置和缩放设置下测试您的应用程序的窗格和页面。 应用程序即使缩小为小维度,也应按预期方式运行。
DPI 感知
WinUI 应用程序会自动缩放其运行的每个显示。 其他 Windows 编程技术(Win32、WinForms、WPF 等)不会自动处理每监视器 DPI 缩放。 如果没有额外工作来支持每个监视器的 DPI 缩放,这些技术可能导致应用程序显示模糊或大小不正确。 有关详细信息,请参阅 Windows 上的高 DPI 桌面应用程序开发。
响应式布局
使用响应式设计技术,以针对不同窗口大小优化应用页面。 请遵循平移或滚动指南,确保无论应用窗口变得多么小,用户都始终可以访问内容。
UI 交互
Windows 用户可以从多种输入设备中进行选择,以便与你的应用程序进行交互,并且 Windows 具有人们习惯使用的特定系统体验。 如果你的应用程序遵循这些体验,你的用户便能可靠地使用应用程序。 当你的应用不遵循这些约定时,用户可能会发现它令人困惑或令人沮丧。
对象上命令
使用对象上命令,例如上下文菜单、轻扫命令和键盘快捷方式。 Windows 11 改进了右键单击上下文菜单的行为,因此如果应用创建上下文菜单,请参阅最新的上下文菜单集成指南。 WinUI 文本控件会自动公开剪切、复制和粘贴命令,但其他控件可能需要额外的工作来支持这些命令。
文本交互
每当应用程序中有文本时,用户都希望他们可以选择并复制它。 如果文本是可编辑的,则用户也会希望自己能够进行剪切和粘贴。 通过向用户提供一致的快捷方式,可以让他们更高效地完成其任务。 请确保可以使用键盘、鼠标或触控板、触摸和触控笔执行这些操作。
平移和滚动
应用程序的用户界面完全适配于不需要滚动的单个页面的情况并不常见。 即使只有几个 UI 元素,用户也可以自由调整应用窗口的大小,并导致某些 UI 元素被隐藏。 请确保应用程序的 UI 正确支持滚动和平移(使用键盘、鼠标或触控板、触摸和笔),以便用户能够访问可能已移出可见窗口区域的任何 UI 元素。
视觉样式
Windows 11 基于 Windows 11 设计原则构建:轻松、冷静、个性、熟悉和完整 + 连贯。 我们相信遵循这些原则的体验会在 Windows 上带来出色的用户体验。
材料:亚克力和云母
亚克力和云母是视觉材料,可为交互式 UI 控件提供独特的“封闭”视觉样式。 使用 Acrylic 将半透明样式应用于临时性表面,例如上下文菜单、浮出控件和其他用户可以轻松关闭的元素。 使用云母将细微的自适应色调添加到长期性 UI 图面,例如标题栏。
有关 Acrylic 和 Mica 材料的详细信息,请参阅 使你的应用在 Windows 11 上更出色的方法。
深色和浅色主题
深色和浅色主题为用户提供了让应用适应其视觉首选项的方法。 Windows 11 更新了色调,避免使用纯白和纯黑两种颜色,从而提供更柔和的视觉体验,让颜色看起来更令人愉悦。 WinUI 默认支持在深色和浅色主题之间切换(请参阅 XAML 主题资源)。 对于 Win32 应用,请参阅在 Win32 应用中支持深色和浅色主题。 (Win32 应用中的标题栏不会自动适应深色主题。请务必按照文章中的 标题栏指南 进行作。
刷新的 UI 元素
Windows 11 几何图形 支持新式应用体验。 渐进式圆角、嵌套元素和一致的线槽组合在一起,产生了一种舒适、稳定和易使用的效果,强调了目的和易用性的统一。
WinUI 3 中内置了视觉对象和行为更改。 使用 WinUI 3,你可以利用已完成的工作。 如果无法使用 WinUI 3,请考虑模拟我们设计工具包和WinUI Gallery中演示的样式。
上下文菜单
上下文菜单是用户通过右键单击或点击和按住作调用的快捷菜单,用于显示与用户与之交互的控件上下文相关的命令菜单。 用户希望上下文菜单的外观和行为在 Windows 中保持一致。 请尽可能使用平台提供的上下文菜单,以使它们与系统的其余部分保持一致。
图标和版式
Windows 11 更新了图标(“Segoe Fluent 图标”),改进了对动画图标的支持,并具有新的 UI 字体(“Segoe UI 变量”)。 在 Windows 11 上尽可能一致地使用这些新图标和字体。 新字体使用更柔和的几何图形,使文本更加清晰。
有关 Windows 上的图标和排版的详细信息,请参阅 在 Windows 11 上提升应用效果的措施。
窗口行为和样式
应用程序在 Windows 提供的框架中运行,用户希望内置的 Windows 外观和行为在应用窗口之间保持一致。 若要确保应用在 Windows 11 上的外观和功能正常,请考虑支持此处列出的功能。
贴靠布局
窗口贴靠在 Windows 11 中得到了极大的增强,“贴靠布局”菜单是一项新功能,可帮助用户发现和使用窗口贴靠的强大功能。 使用贴靠布局菜单在不同的贴靠布局中测试应用,确保应用支持不同的贴靠尺寸(如 1/2、1/3 和 1/4 屏幕)。
如果默认情况下应用没有显示贴靠布局菜单,请参阅支持为 Windows 11 上的桌面应用使用贴靠布局,了解要启用它可采取的一些步骤。
标题栏和字幕按钮
标题栏和字幕按钮(最小化、最大化、关闭)是用户与 Windows 交互以重设大小、移动和关闭应用窗口的方式。 拥有一致的体验可帮助用户顺利使用应用程序。 请参阅 Windows 应用程序标题栏,了解适用于 Windows 的标题栏和字幕按钮设计。
可使用 Windows 应用 SDK API 在 WinUI 3、.NET、WinForms 和 WPF 应用中将应用内容与标题栏集成。
圆角
在大多数情况下,你的应用程序的窗口默认在 Windows 11 上是圆角的。 如果您自定义应用窗口时没有圆角,请参阅 适用于 Windows 11 桌面应用中应用圆角 以了解可以执行的操作。 此外,还应避免自定义窗口边框和阴影,这会阻止系统将窗口显示为圆角。
Shell 集成点
即使应用未在前台运行或屏幕上可见,Windows shell 集成也允许用户从你的应用中受益。 当应用与 Windows 很好地集成时,它将成为用户与其他应用的工作流的一部分,并帮助创建无缝体验。
Toast 通知
Toast 通知是显示在用户屏幕底部和通知中心的 Windows 通知。
- 个性化并使其可执行,并确保通知对用户有用。 向用户提供他们想要的内容,而不是你希望他们知道的内容。
- 避免噪音通知。 应用中断过多,导致用户为应用关闭此关键通信通道。
- 响应用户的意向。 选择通知应在通知的上下文中启动应用。 此指南的唯一例外是用户在通知上选择附加到后台任务(如快速回复)的按钮这一情况。
- 提供一致的通知中心体验。 通过清除旧通知保持通知中心整洁。
有关 Toast 通知的详细信息,请参阅通知设计基础知识。
性能和基础知识
Windows 用户希望 Windows 应用表现出出色的性能和基础。 在设计和构建应用时,请记住针对内存使用情况、电源消耗、响应能力、可靠性和对长期可持续性的影响进行优化。 分配时间来测试和衡量应用程序的基础知识和性能可确保用户具有一流的体验。
遵循本部分中的最佳做法可帮助你满足客户在这些条件中的期望。
-
- 减少前台内存使用量。
- 使后台工作最小化。
- 在后台释放资源。
- 确保应用程序不会泄漏内存。
-
- 为可选功能启用“付费播放”。
- 确保所有缓存都高效调整大小。
- 以节省磁盘的方式实现新体验。
- 尽可能优化单个二进制大小。
-
- 不要在后台唤醒 CPU 或使用系统资源。
-
- 定义主要交互场景,并添加 ETW 事件以进行衡量。
- 根据与用户期望关联的交互类设置目标。
有关详细信息,请参阅 性能和基础知识概述。 本文回答了以下问题:“什么是应用程序性能,为什么很重要?”和“我可以使用哪些工具来衡量 Windows 应用程序性能?”它还链接到案例研究、相关博客、支持社区以及性能工程如何通过减少应用程序对我们星球的影响与可持续性相交的信息。
操作系统和硬件优化
可以通过多种方式生成、打包和交付 Windows 应用。 本部分中的最佳做法可帮助你跨硬件配置优化应用程序的这些方面。
MSIX 应用附加和 Azure 虚拟桌面
若要使应用在企业环境中运行得最好,请添加对 MSIX 应用附加的支持。
MSIX 应用附加可让你将 MSIX 应用程序交付到物理计算机和虚拟机。 它专为 Azure 虚拟桌面 (AVD) 而设计,后者是一种在云上运行的桌面和应用虚拟化服务。 将 MSIX 应用附加与 AVD 配合使用有助于改进用户的登录时间,并能够降低企业的基础结构成本。
基于 ARM 的 Windows
Windows 可以在 ARM 设备上运行。 ARM 电脑受益于延长的电池生命以及对移动数据网络的集成支持。 这些电脑还提供出色的应用程序兼容性,让你在不进行任何修改的情况下运行现有的 x86 和 x64 应用程序。
为了获得最佳性能,你的应用可以通过构建完整的 Arm 版本或优化将受益于本机性能的代码库部分来充分利用节能的 Arm 处理器体系结构。 有关这些技术的详细信息,请参阅 适用于 Arm 的 Windows 和 适用于 Arm 的 Windows 11 应用程序的 Arm64EC。
推送通知
推送通知 允许你以性能优化的方式将云服务中的信息发送到应用。 推送通知包括原始通知、锁屏提醒通知以及从云服务发送的 Toast 通知。
- 使用推送通知唤醒应用或客户端,而不是始终使其保持运行状态以优化用户设备上的性能。
- 不要使用通知通道发送广告。
- 尊重
retry-after标头 – 这种做法可保护服务并确保通知传递成功。 - 从系统中删除已过期或吊销的通道。 Windows 通知服务 (WNS)不会处理已过期或已吊销通道的请求。
- 避免突然对 WNS 进行大量请求。 此模式可能导致受限制的响应。
- 利用
MS-CV标头。 此标头有助于实现端到端可跟踪性和诊断。 - 准备一种备用机制,用于通知不起作用的情况。
- 使用 Azure 通知中心 (ANH)。 凭借 ANH,你可以访问参与功能,如确定受众目标、安排通知和广播通知。 如果你是目前仅限 Windows 的开发人员,则使用 ANH 使你以后可以轻松地将通知基础结构转换为其他平台。
应用程序发现和管理
可靠的安装、更新和卸载体验是一致、高质量用户体验的重要组成部分。 以下最佳做法有助于确保在用户发现和管理应用程序时留下良好的印象:
应用程序发现
- 在 Microsoft Store 上列出你的应用可使你的应用更易于发现。
- 如果跨多个通道(例如,在网站和 Microsoft 应用商店中)托管应用,应用程序应在所有通道之间具有一致的应用程序标识和更新机制。
- 通过 Microsoft Store 分发应用,让用户更容易发现应用。 请注意,Windows 用户通过 Windows 包管理器 WinGet 访问应用商店应用。 如果不发布到 Microsoft Store,仍然可以通过 WinGet 存储库使应用在 WinGet 中很容易发现。
安装和卸载
- 支持每用户安装。 此支持使用户能够更轻松地安装并避免 UAC 提示。
- 确保应用程序安装无错误、透明且对文件管理考虑周密。 应用程序安装不应保留任何临时文件。
- 在可行时避免要求提升的权限来安装和要求操作系统重启。
- 支持无提示安装。 对于企业环境中的应用可管理性,此支持非常重要。
- 确保应用列在 “应用 ->已安装的应用” 列表中。
- 请考虑使用 MSIX 来确保用户享有无缝安装、更新和卸载体验。 MSIX 会自动删除应用二进制文件和数据。 有关打包应用如何处理文件和注册表项的信息,请参阅了解打包的桌面应用如何在 Windows 上运行。
- 对于未打包的应用,请确保用户可以通过“设置”中的 “应用 ->已安装的应用 ”列表轻松卸载应用程序。 当用户卸载应用程序时,请确保也会删除“开始”菜单项、文件、目录、注册表项和临时文件。 请考虑让用户在卸载应用程序时可选择保留其数据。
- 确保应用在卸载期间会删除所有二进制文件和应用程序数据。 用户创建的内容应存储在诸如
Documents以下位置:即使在卸载应用后,用户也可以保留这些位置。 - 避免安装或更新可能需要重新启动的系统二进制文件。
- 与 RestartManager 集成,以在 OS 更新之间保存和还原状态。
更新
- 支持一种更新机制,允许应用在方便用户时重启。 考虑使用 Windows 应用 SDK 重启 API 来管理 WinUI 3 应用的应用行为。
- 确保更新机制仅下载需要更新的基本更改组件。 此方法可最大程度地减少所需的网络带宽。
- 提供更新和修复应用的方法。 考虑 MSIX,它会自动处理更新修复。 有关详细信息,请参阅自动更新和修复应用。
- 考虑基于推送通知的更新或在应用启动或重启时检查可用更新。
其他资源
可访问性
具有辅助性的 Windows 应用支持为尽可能多的人提供丰富且具有包容性的体验,包括残障人士(临时和永久)、个人偏好、特定工作风格或情况约束(如共享工作空间、驾驶、烹饪和防眩等)。
事实上,世界卫生组织并未将残疾定义为个人特征,而是将其定义为个人与其周围物理和数字世界之间不匹配的互动。
辅助功能对人员和业务均有利
辅助功能是一项责任
全世界有超过 10 亿人具有某种形式的残疾。 然而,只有10分之一的人获得充分参与我们经济和社会所需的辅助技术。 通常,残疾人的失业率是非残疾人的两倍。 无论是情境性、暂时性残疾,还是永久性残疾,残疾都可能随时影响任何人。
辅助功能是一个机会
根据 Microsoft 辅助功能方法数据表:采用在工作场所雇用和支持残疾人的最佳做法的包容性组织表现优于同行,并能更好地吸引和留住优秀人才。 到 2020 年,千禧年一代将占全球劳动力的 75%,他们通常会选择能体现其价值观的雇主。 多样性和包容性位居榜首。
纳入辅助功能
将辅助功能纳入 Windows 应用可最大程度地提高用户参与度,提高产品满意度,并鼓励产品忠诚。 主动设计和实现可访问体验通常会长期降低开发和维护成本。
有关构建辅助性 Windows 应用的详细指南,请参阅 Windows 11 和 Windows 10 中的辅助功能。
辅助功能测试
辅助功能见解是一套功能强大的工具,供开发人员测试其应用和服务的辅助功能。 下面是一些用于测试辅助功能的工具:
- 在适用于 Windows 的辅助功能见解中检查。 检查辅助功能树以查找容易解决的任务,比如标签中的提示、不正确的角色和其他问题。
- 适用于 Windows 的辅助功能见解中的事件监视 · 辅助功能见解。 有关事件监视的详细信息,请参阅支持 UI 自动化控件类型。
- 在 PR 或 CI/CD 中运行辅助功能见解自动检查。 有关详细信息,请参阅 axe-pipelines-samples。
- 修复您发现的所有错误,因为它们都直接影响到可访问性。
安全和隐私
不安全的应用程序可能是允许攻击者执行恶意活动的入口点。 即使你的应用没有安全 bug,不良参与者也可以使用你的应用通过网络钓鱼和其他违反安全和隐私边界的社会工程形式发起攻击。 本部分中的最佳做法可帮助你缓解与安全和用户隐私相关的风险。
安全指导原则
- 遵循安全开发生命周期进行所有开发。
- 威胁建模有助于避免安全缺陷。
- 使用安全库、语言和工具可最大程度减少实现缺陷。
- 安全默认值可防止用户错误导致的安全问题。
- 无需管理权限即可安装应用。
- 理想情况下,应用应同时支持管理安装和每用户安装。
- 使用 MSIX 打包 是实现此目标的一种方法。
-
无需管理权限即可运行应用。
- 如果某些功能需要管理权限, 请考虑将它们分成 自己的进程以减少攻击面。
- 使用具有保证内存安全的语言,例如 C#、JavaScript 或 Rust,尤其是用于分析不受信任的数据等有风险的代码路径。
- 使用编译器和工具集提供的所有安全缓解措施(请参阅 Microsoft Visual C++ 中的安全功能,了解 Visual C++)。
- 始终将所选语言或框架的标准库用于加密和其他安全敏感型代码。 不要尝试自行构建。
- 对应用程序所有组件进行数字签名 – 不仅是安装程序,还有卸载程序(如有)。 此外,请对构成应用的所有 EXE、DLL 和其他可执行文件签名。
- 数字签名使用户能够验证应用的真实性,并支持企业管理员使用 Windows Defender 应用程序控制来保护其设备。
- 使用 MSIX 打包是实现此目标的一种方法。
- 确保所有网络通信都通过安全传输,如 SSL。
- 提供防护措施或其他缓解措施,帮助防止用户意外执行有害操作,即使对攻击者强制这样做的情况也适用。
- 简单的“是否确实要执行 X? 是/否“对话框通常无效,因为用户条件是单击”是”。
大多数新式应用都会出于各种原因收集和使用大量数据(包括个人数据)。 遥测、产品改进和盈利是使用数据的三种常见原因,但用户和监管机构对这些做法的隐私影响越来越敏感。 他们希望应用收集和使用的数据能保持透明和受掌控。 使用以下提示来帮助满足用户隐私需求。
隐私准则
- 确保应用提供准确的隐私策略。 理想情况下,除了提供长篇法律策略(面向律师编写)之外,还提供为普通受众(用户)编写的摘要文档。
- 熟悉你的应用可用的市场中的隐私法规,并确保你的应用满足或超过披露、使用权、删除请求和其他隐私问题的任何要求。
- 收集完成应用体验所需的最少个人数据量。
- 不要“以防万一”收集数据 - 收集所有数据应该有一个有效的理由,例如改善客户体验或促进盈利。
- 在收集和存储个人数据之前,请始终获得用户的同意。 为用户提供一种简单的方法来还原其将来的决定。 避免使用“深色模式”,例如让“同意”对话框中的“是”按钮比“否”按钮更大或更突出。
- 查阅适用法规,确定特定类型的数据需要哪些具体的披露和同意。 例如,某些地区可能允许用户查看、更改或删除你存储的有关他们的数据。
- 如果必须通过网络传输数据,请始终使用安全连接,例如通过 TLS 进行连接。
- 避免将个人数据存储在集中式位置,例如网站。 如果必须存储个人数据,请尽量减少存储的数据量,仅在必要时存储数据,并确保其安全加密。
- 验证你使用的任何第三方库或 SDK 是否也具有良好的隐私做法。 请注意,此问题不仅限于广告 SDK - 连接到 Internet 的任何库都可能会影响应用用户的隐私。