辅助功能概述

本文概述了与 Windows 应用的辅助功能方案相关的概念和技术。

辅助功能与您的应用程序

有许多可能的残疾或障碍,包括移动性、视觉、颜色感知、听力、语音、认知和识字方面的限制。 但是,可以遵循此处提供的准则来解决大多数要求。 这意味着提供:

  • 支持键盘交互和屏幕阅读器。
  • 支持用户自定义,例如字体、缩放设置(放大)、颜色和高对比度设置。
  • UI 组件或部分的替代方案或补充选项。

XAML 控件提供了内置的键盘支持和对辅助技术(如屏幕阅读器)的支持,这些技术利用了已经支持 UWP 应用、HTML 和其他 UI 技术的无障碍功能框架。 该内置支持实现了基本级别的辅助功能,您只需设置少量属性即可轻松自定义。 如果要创建自己的自定义 XAML 组件和控件,还可以通过使用 自动化对等的概念向这些控件添加类似的支持。

此外,数据绑定、样式和模板功能还可以轻松地实现对动态更改的支持,以显示替代 UI 的设置和文本。

用户界面自动化

辅助功能支持主要来自对 Microsoft UI 自动化框架的集成支持。 这种支持通过基类、控件类型的类实现的内置行为,以及 UI 自动化提供程序 API 的接口表示来提供。 每个控件类都使用 UI 自动化中的自动化对等类和自动化模式类,这些类将控件的角色和内容报告给 UI 自动化客户端。 应用被 UI 自动化视为顶级窗口,通过 UI 自动化框架,该应用窗口中所有与辅助功能相关的内容都可供 UI 自动化客户端使用。 有关 UI 自动化的详细信息,请参阅 UI 自动化概述

辅助技术

许多用户的辅助功能需求是通过用户安装的辅助技术产品,或由操作系统提供的工具和设置来满足的。 这包括屏幕阅读器、屏幕放大和高对比度设置等功能。

辅助技术产品包括各种软件和硬件。 这些产品通过标准键盘界面和辅助功能框架工作,这些框架向屏幕阅读器和其他辅助技术报告有关 UI 的内容和结构的信息。 辅助技术产品的示例包括:

  • 屏幕键盘,使用户能够使用指针代替键盘键入文本。
  • 语音识别软件,可将口语转换为键入的文本。
  • 屏幕阅读器,将文本转换为口语或其他形式,如盲文。
  • “讲述人”屏幕阅读器,这是 Windows 的一部分。 讲述人具有触摸模式,它可以通过处理触摸手势来执行屏幕阅读任务,当没有键盘可用时。
  • 调整其显示或区域的程序或设置,例如高对比度主题、显示器的每英寸点数(dpi)设置或放大镜工具。

键盘和屏幕阅读器支持良好的应用通常适用于各种辅助技术产品。 在许多情况下,UWP 应用适用于这些产品,而无需对信息或结构进行其他修改。 但是,你可能想要修改某些设置以获得最佳辅助功能体验或实现其他支持。

辅助功能测试列出了一些可用于使用辅助技术测试基本辅助功能场景的选项。

屏幕阅读器支持和基本辅助功能信息

屏幕阅读器以某种其他格式(如口语或盲文输出)呈现文本,从而提供对应用中文本的访问权限。 屏幕阅读器的确切行为取决于软件及其用户的配置。

例如,当用户启动或切换到正在查看的应用时,某些屏幕阅读器会读取整个应用 UI,这样用户就可以在尝试导航之前接收所有可用的信息内容。 某些屏幕阅读器还会在选项卡导航期间获得焦点时读取与单个控件关联的文本。 这使用户可以在应用程序的输入控件之间导航时自行定位。 讲述人是屏幕阅读器的一个示例,它提供这两种行为,具体取决于用户选择。

应用的元素部分的 辅助名称 是屏幕阅读器或任何其他辅助技术需要的最重要信息,以帮助用户了解或导航应用。 在许多情况下,控件或元素已经有一个可访问的名称,该名称是根据您另外提供的其他属性值计算而来的。 一般情况下,您可以在支持并显示内部文本的元素中使用已预先计算的名称。 对于其他元素,有时需要考虑其他方法,以便通过遵循元素结构的最佳做法来提供可访问的名称。 有时,你需要提供一个明确用作应用可访问性名称的名字。 有关这些计算值中有多少值在常见 UI 元素中有效,以及有关辅助名称的详细信息,请参阅 基本辅助功能信息

还有其他几个可用的自动化属性(包括下一部分所述的键盘属性)。 但是,并非所有屏幕阅读器都支持所有自动化属性。 通常,应设置所有适当的自动化属性并进行测试,以便为屏幕阅读器提供尽可能广泛的支持。

键盘支持

若要提供良好的键盘支持,必须确保应用程序的每个部分都可以与键盘一起使用。 如果你的应用主要使用标准控件,并且不使用任何自定义控件,那么你已经完成了大部分工作。 基本 XAML 控件模型提供内置键盘支持,包括选项卡导航、文本输入和特定于控件的支持。 用作布局容器(如面板)的元素按照布局顺序建立默认的 tab 键顺序。 该顺序通常是用于 UI 可访问表示形式的正确 Tab 顺序。 如果使用 ListBoxGridView 控件来显示数据,它们提供内置的箭头键导航。 或者,如果使用 按钮 控件,该控件已能够处理空格键或回车键以激活按钮。

有关键盘支持的所有详细信息,包括 Tab 键顺序以及按键激活或导航,请参阅 键盘辅助功能

媒体和字幕

通常通过 MediaElement 对象显示音像媒体。 可以使用 MediaElement API 来控制媒体播放。 出于辅助功能目的,请提供控件,使用户能够根据需要播放、暂停和停止媒体。 有时,媒体包括用于辅助功能的其他组件,例如字幕或包含叙述性描述的备用音轨。

可访问文本

文本的三个主要方面与辅助功能相关:

  • 工具必须确定文本是作为选项卡序列遍历的一部分读取,还是仅作为整体文档表示形式的一部分进行读取。 通过选择用于显示文本的相应元素或调整这些文本元素的属性,可以帮助控制此决定。 每个文本元素都有一个特定用途,并且该用途通常具有相应的 UI 自动化角色。 使用错误的元素可能会导致向 UI 自动化报告错误的角色,并为辅助技术用户创建令人困惑的体验。
  • 许多用户具有视觉限制,因此很难阅读文本,除非它与背景具有足够的对比度。 对于没有该视线限制的应用设计人员来说,这如何影响用户并不直观。 例如,对于色盲用户,设计中的颜色选择不佳可能会阻止某些用户阅读文本。 最初针对 Web 内容提出的辅助功能建议定义了对比度标准,从而避免了应用中的这些问题。 有关详细信息,请参阅 无障碍文本要求
  • 许多用户很难阅读太小的文本。 首要的是,通过在应用的 UI 中将文本设置为足够大,可以避免此问题。 但是,对于显示大量文本或与其他视觉元素交织的文本的应用来说,这非常困难。 在这种情况下,请确保应用与可以纵向扩展显示的系统功能正确交互,以便应用中的任何文本随其一起纵向扩展。 (某些用户将 dpi 值更改为可访问性选项。该选项可在 “轻松访问”中的“在屏幕上放大”中获取,它会重定向到 “控制面板” 中的“外观和个性化” / “显示”的 UI。)

支持高对比度主题

UI 控件使用视觉表示形式,该表示形式定义为主题的 XAML 资源字典的一部分。 当系统设置为高对比度时,专门使用其中一个或多个主题。 当用户切换到高对比度时,通过动态查找资源字典中的相应主题,所有 UI 控件也将使用适当的高对比度主题。 确保您没有通过指定显式样式或使用其他样式技术来禁用主题,这些操作可能会阻止高对比度主题加载并覆盖您的样式更改。 有关详细信息,请参阅 高对比度主题

替代 UI 的设计

在设计应用时,请考虑其如何供具有受限移动性、视觉和听力的人员使用。 由于辅助技术产品大量使用通用的用户界面,因此即使不做其他辅助功能方面的调整,仍然特别需要提供良好的键盘和屏幕阅读器支持。

在许多情况下,可以通过使用多种技术扩大受众来传达重要信息。 例如,可以使用图标和颜色信息突出显示信息以帮助色盲用户,并且可以显示视觉警报以及声音效果,以帮助失聪或听力困难的用户。

如有必要,可以提供替代的可访问用户界面元素,以完全删除无性元素和动画,并提供其他简化来简化用户体验。 下面的代码示例演示如何根据用户设置显示一个 UserControl 实例代替另一个实例。

XAML

<StackPanel x:Name="LayoutRoot" Background="White">

  <CheckBox x:Name="ShowAccessibleUICheckBox" Click="ShowAccessibleUICheckBox_Click">
    Show Accessible UI
  </CheckBox>

  <UserControl x:Name="ContentBlock">
    <local:ContentPage/>
  </UserControl>

</StackPanel>

Visual Basic

Private Sub ShowAccessibleUICheckBox_Click(ByVal sender As Object,
    ByVal e As RoutedEventArgs)

    If (ShowAccessibleUICheckBox.IsChecked.Value) Then
        ContentBlock.Content = New AccessibleContentPage()
    Else
        ContentBlock.Content = New ContentPage()
    End If
End Sub

C#(编程语言)

private void ShowAccessibleUICheckBox_Click(object sender, RoutedEventArgs e)
{
    if ((sender as CheckBox).IsChecked.Value)
    {
        ContentBlock.Content = new AccessibleContentPage();
    }
    else
    {
        ContentBlock.Content = new ContentPage();
    }
}

验证和发布

有关辅助功能声明和发布应用的详细信息,请参阅 应用商店中的辅助功能

注释

将应用声明为可访问性应用仅与 Microsoft Store 相关。

自定义控件中的辅助技术支持

创建自定义控件时,建议实现或扩展一个或多个 AutomationPeer 子类,以提供辅助功能支持。 在某些情况下,只要使用与基控件类相同的对等类,您的派生类在基本层面上的自动化支持就足够了。 然而,您应该对其进行测试,并且仍然建议按照最佳实践实现一个对等方,以确保对等方能够正确报告新控件类的类名。 实现自定义自动化辅助程序涉及几个步骤。 有关详细信息,请参阅 自定义自动化伙伴

支持 XAML/Microsoft DirectX 互操作的应用中的辅助技术支持

Microsoft XAML UI(使用 SwapChainPanelSurfaceImageSource)中托管的 DirectX 内容默认不可访问。 XAML SwapChainPanel DirectX 互操作示例 演示如何为托管的 DirectX 内容创建 UI 自动化对等方。 此方法使托管内容可通过 UI 自动化进行访问。

例子

小窍门

打开 WinUI 3 画廊应用程序,并查看以下辅助功能原则的实际应用:

WinUI 3 示例集应用程序包括大多数 WinUI 3 控件、特性和功能的交互式示例。 通过 Microsoft Store 获取应用,或在 GitHub 上获取源代码