使用 C#/VB/C++ 和 XAML 的 Windows 运行时应用的辅助功能

我们介绍了与使用 C#、Visual Basic 或 Visual C++ 组件扩展 (C++/CX) 编写应用代码及使用 XAML 编写其 UI 定义的 Windows 运行时应用的辅助功能方案相关的部分概念和技术。

要查找本主题的 JavaScript 版本吗?请参阅使用 JavaScript 和 HTML 的 Windows 运行时应用辅助功能

路线图: 本主题与其他主题有何关联?请参阅:

先决条件

我们假设你了解如何创建基本 Windows 运行时应用。有关创建第一个使用 C++、C# 或 Visual Basic 的 Windows 运行时应用的说明,请参阅使用 C# 或 Visual Basic 创建你的第一个 Windows 运行时应用使用 C++ 创建你的第一个 Windows 运行时应用

辅助功能和应用

辅助功能是指应用可供那些对使用常规用户界面存在限制(阻碍或阻止他们使用)的用户使用。对于某些情况,辅助功能要求是由法律强制实施的。但是,无论法律是否有规定,最好都解决辅助功能问题,以尽可能扩大应用的受众范围。其中还包括关于应用辅助功能的 Windows 应用商店声明。

注意  将应用声明为辅助应用仅与 Windows 应用商店有关。

有许多可能的残障人士,包括在以下方面受限的人士:移动、视觉、颜色识别、听觉、说话能力、认知能力以及读写能力。不过,通过遵循此处提供的指南可以满足大部分的要求。这意味着:

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

用于 XAML 的 Windows 运行时控件为辅助技术(如屏幕阅读器)提供了内置的键盘支持和屏幕阅读器支持,从而利用了已支持 Windows 运行时应用、HTML 和其他 UI 技术的辅助功能框架。此内置支持启用了基本级别的辅助功能,只需执行极少量的操作(设置少量属性)即可完成自定义。如果你要创建自己的自定义 XAML 组件和控件,则还可以通过使用自动化对等这一概念来添加对于这些控件的类似支持。

另外,使用数据绑定、样式以及模板功能区域可以轻松实现对显示设置和替换 UI 文本的动态更改支持。

UI 自动化

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

辅助技术

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

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

  • 屏幕键盘(可让用户使用指针代替键盘来键入文本)。
  • 声音识别软件(可将说词转换为键入的文本)。
  • 屏幕阅读器(可将文本转换为说词或其他形式(如盲文))。
  • 讲述人屏幕阅读器(专门属于 Windows)。讲述人具有触摸模式,当没有提供键盘时,该模式可以通过处理触控笔势执行屏幕阅读任务。
  • 用于调整显示器或其区域的程序或设置,例如高对比度主题、显示器的每英寸点数 (dpi) 设置或“放大镜”工具。

具有良好键盘和屏幕阅读器支持的应用通常可成功用于大量的辅助技术产品。在很多情况下,Windows 运行时应用可非常好地用于这些产品,而无需对信息或结构进行任何额外的修改。但是,你可能需要修改某些设置以获得最佳辅助功能体验或实现其他支持。

测试应用的辅助功能中列出了你可以用于通过辅助技术测试基本辅助功能方案的一些选项。

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

可通过屏幕阅读器来访问应用中的文本,方法是以某个其他格式呈现该文本,例如口头语言或盲文输出内容。屏幕阅读器的确切行为取决于软件和软件的用户配置。

例如,当用户启动或切换至要查看的应用时,某些屏幕阅读器会读取整个应用 UI,从而允许用户在接收所有可用信息内容后再尝试进行导航。某些屏幕阅读器在 Tab 键导航过程中接收焦点时还会读取与单个控件关联的文本。从而允许用户在应用程序的输入控件之间导航时确定自己的位置。“讲述人”即为提供两种行为的屏幕阅读器示例,具体取决于用户选择。

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

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

键盘支持

为了提供良好的键盘支持,必须确保应用程序的每个部分都可与键盘结合使用。如果你的应用主要使用标准控件而不使用任何自定义控件,则说明你已经做到了这一点。基本 Windows 运行时 XAML 控件模型提供了内置的键盘支持,包括 Tab 导航、文本输入以及特定于控件的支持。充当布局容器(如面部)的元素使用布局顺序来建立默认的 Tab 键顺序。 该顺序通常是适合 UI 的辅助表示形式的 Tab 键顺序。如果使用 ListBoxGridView 控件显示数据,则它们会提供内置的箭头键导航。或者,如果使用 Button 控件,则它已经为按钮激活而处理空格键或 Enter 键。

有关 Windows 运行时应用中键盘支持(包括 Tab 键顺序和基于键盘的激活或导航)的所有方面的详细信息,请参阅实现键盘辅助功能

媒体和字幕

对于使用 C++、C# 或 Visual Basic 的 Windows 运行时应用,通常通过 MediaElement 对象显示视听媒体。你可以使用 MediaElement API 控制媒体播放。为实现辅助功能,所提供的控件应能够使用户根据需要播放、暂停和停止媒体。媒体有时包括面向辅助功能的额外组件,如字幕或包括叙述性描述的可选音轨。有关与媒体、MediaElement 和辅助功能相关的概念的详细信息,请参阅使媒体内容成为辅助内容

辅助文本

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

  • 工具必须确定文本是在 Tab 序列遍历过程中读取,还是仅作为整个文档表示形式的一部分进行读取。你还可以通过选择要用来显示文本的相应元素或者通过调整这些文本元素的属性来帮助控件确定上述内容。Windows 运行时应用中提供的每个文本元素都有一个特定的用途,而且该用途通常具有相应的 UI 自动化角色。如果使用错误的元素,可能会导致向 UI 自动化报告错误的角色,而且可能会为辅助技术用户创建令人混淆的体验。
  • 除非文本与背景的对比度很大,否则,许多用户都会因视觉上的局限而很难阅读文本。对于没有该视觉局限的应用设计人员来说,这对用户造成的影响不太直观。例如,对于色盲用户,如果设计中的颜色选项不好,可能会使某些用户无法阅读文本。最初为 Web 内容提出的辅助功能建议还定义了可能会避免这些应用问题的对比度标准。有关详细信息,请参阅满足辅助文本的要求
  • 对于太小的文本,许多用户都有阅读困难。你可以通过使应用 UI 中的文本在首次出现时合理变大来避免发生此问题。但是,对于显示大量文本的应用或者对于与其他视觉元素穿插在一起的文本,则具有一定的挑战性。在这些情况下,请确保应用与能够放大到显示器的系统功能正确地交互,以便应用中的任何文本都能够随控件一起放大。(某些用户可使用辅助功能选项更改 DPI 值。该选项可从“轻松访问”的“使屏幕上的内容变大”中获得,可重定向到“外观和个性化”/“显示器”的“控制面板”UI。)

支持高对比度主题

为使用 C++、C# 或 Visual Basic 的 Windows 运行时应用提供的 UI 控件使用一种视觉表示形式,该表示形式定义为 XAML 资源主题字典的一部分。这些主题中的一个或多个专门用于为系统设置了高对比度的情况。当用户通过从资源字典中动态查找相应主题来切换到高对比度时,所有 UI 控件也将使用相应的高对比度主题。你只需确保尚未禁用这些主题即可,方法是指定明确的样式,或者使用其他可防止高对比度主题加载和替代样式更改的样式技术。有关详细信息,请参阅支持高对比度主题

为替换 UI 设计

在设计应用时,应考虑在行动、视觉和听觉方面受限的用户可以如何使用这些应用。由于辅助技术产品大量使用标准 UI,因此提供良好的键盘和屏幕阅读器支持尤为重要,即便未对辅助功能做任何其他调整,也是如此。

很多情况下,可以使用多种技术传递重要信息以便扩宽受众范围。例如,可以同时使用图标和颜色信息来高亮显示信息以帮助色盲用户,并可显示视觉警报和声音效果以帮助听力受损的用户。

如有必要,可以提供可完全删除非必要元素和动画的辅助性替换用户界面元素,并提供其他简化措施以简化用户体验。以下代码示例说明了如何根据用户设置显示一个 UserControl 实例以代替另一实例。


<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>


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

验证和发布

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

注意  将应用声明为辅助应用仅与 Windows 应用商店有关。

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

创建自定义控件时,建议你同时实现或扩展一个或多个 AutomationPeer 子类以提供辅助功能支持。在某些情况下,只要你使用与基本控件类所用相同的对等类,对你的派生类的自动化支持在基本级别上便足够了。但是,你应该对此进行测试,并且作为最佳做法,仍然建议你实现一个对等,以便对等可以正确地报告你的新控件类的类名称。实现自定义的自动化对等涉及多个步骤。有关详细信息,请参阅自定义的自动化对等

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

默认情况下,无法访问 XAML UI 中托管的 DirectX 内容(使用 SwapChainPanelSurfaceImageSource)。 XAML SwapChainPanel DirectX 互操作示例显示如何为托管的 DirectX 内容创建 UI 自动化对等。这种技术可以让托管的内容可通过 UI 自动化进行访问。

相关主题

Windows.UI.Xaml.Automation
辅助功能设计
使用 JavaScript 和 HTML 的 Windows 运行时应用的辅助功能
XAML 辅助功能示例

 

 

显示:
© 2015 Microsoft