辅助功能概述

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

辅助功能和应用

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

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

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

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

UI 自动化

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

辅助技术

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

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

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

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

辅助功能测试列出了可用于测试基本辅助功能方案的某些选项。

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

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

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

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

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

键盘支持

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

有关键盘支持的所有方面的详细信息,包括 Tab 键顺序和基于键的激活或导航,请参阅 键盘辅助功能。

媒体和字幕

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

辅助文本

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

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

支持高对比度主题

UI 控件使用定义为主题 XAML 资源字典的一部分的视觉表示形式。 当系统设置为高对比度时,专门使用其中一个或多个主题。 当用户切换到高对比度时,通过动态查找资源字典中的相应主题,所有 UI 控件也将使用适当的高对比度主题。 只需通过指定显式样式或使用另一种样式技术来防止高对比度主题加载和重写样式更改,确保尚未禁用主题。 有关详细信息,请参阅 高对比度主题

替代 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 互操作的应用中的辅助技术支持

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

示例

提示

打开 WinUI 3 库应用并查看以下辅助功能原则:

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