65.9K
CodeProject 正在变化。 阅读更多。
Home

通用 Windows 应用的可访问性

starIconstarIconstarIconstarIconstarIcon

5.00/5 (11投票s)

2015 年 2 月 28 日

CPOL

6分钟阅读

viewsIcon

31117

downloadIcon

258

让有身体限制的人也能使用你的应用。

目录

  1. 引言

  2. 轻松访问

  3. 实现键盘可访问性

  4. 改进屏幕阅读

  5. 实现屏幕阅读

  6. 本地化辅助功能属性

引言

可访问性是指让有妨碍使用常规用户界面的残障人士也能使用你的应用。有许多可能的残障情况。但是,我们可以通过遵循 MSDN 指南来满足大多数要求。这意味着提供

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

XAML 应用内置了许多可访问性功能,旨在帮助残障用户。为了让你的应用能够被更广泛的客户群体(包括残障人士)使用,我们应该采取措施确保它能更好地与这些辅助技术协同工作。

 

轻松访问

Windows 提供多种程序和设置,可以让计算机使用起来更轻松、更舒适。如果需要其他可访问性功能,还可以向计算机添加其他辅助技术产品。轻松访问中心是一个集中的位置,你可以在其中设置 Windows 中提供的可访问性设置和程序。在轻松访问中心,你可以快速访问和设置 Windows 中包含的可访问性设置和程序。

你可以配置屏幕阅读器 Narrator,并测试你的应用,以达到不同程度的成功。你可以选择高对比度主题,观察应用使用的控件如何自动更改以匹配该主题。你可以关闭标准动画。等等。

 

实现键盘可访问性

许多用户仅依赖键盘来导航你的应用 UI 和访问其功能。如果你的应用未能提供良好的键盘访问,这些用户在使用你的应用时可能会遇到困难,甚至完全无法使用。

要使用键盘与控件交互,控件必须获得焦点,并且要获得焦点(不使用指针)就必须在 UI 设计中通过 Tab 键导航可访问。默认情况下,控件的 Tab 顺序与它们添加到设计图面、在 XAML 中列出或以编程方式添加到容器中的顺序相同。

但是,默认顺序不一定与视觉顺序对应。为了确保你的应用具有良好的 Tab 顺序,请亲自测试此行为。你可以通过调整 XAML 来使 Tab 顺序与视觉顺序匹配。或者,你可以通过设置 TabIndex 属性来覆盖默认 Tab 顺序。

<Grid>

  <TextBox x:Name="FirstName" TabIndex="1"/>

  <TextBox x:Name="LastName" TabIndex="2"/>

</Grid>

改进屏幕阅读

有一个名为 Narrator 的工具,它是一个屏幕阅读器,可以朗读屏幕上的文本,并描述错误消息等事件,因此你可以在没有显示器的情况下使用 PC。Narrator 提供以下语言:英语(美国、英国和印度)、法语、意大利语、德语、日语、韩语、普通话(中国大陆简体和中国大陆繁体)、粤语(中国大陆繁体)、西班牙语(西班牙和墨西哥)、波兰语、俄语和葡萄牙语(巴西)。

你可以随时通过按 Windows + Enter 键 或从“轻松访问中心”打开 Narrator。

在 Windows Phone 中,你可以从设置 -> 轻松访问 -> Narrator 打开 Narrator。

实现屏幕阅读

让我们创建一个具有非常简单 UI 的 Windows 通用应用。我将分享 Windows 应用商店和 Windows Phone 应用的 UI。如果你不熟悉通用 Windows 应用或要在两个平台之间共享视图和代码,请参阅我的另一篇文章 通用应用中的条件编译

使用 C# 创建一个 Windows 通用应用。我选择空白应用,并将其命名为 AccessibiltyExample。

 

 

为了共享视图,我将 MainPage.xaml 文件之一拖到了共享项目中,然后将其从其他两个项目中删除。现在,这两个项目都有一个通用的 MainPage.xaml 文件。项目在解决方案资源管理器中的视图如下所示。

 

现在让我们创建一个简单的 UI,其中包含一个 TextBox、一个 Button 和一个 TextBlock。

如果你打开 Narrator 并以英语作为 Windows 默认语言在 Windows 中启动 AccessibiltyExample 应用,你会听到以下声音:

“AccessibiltyExample.windows 窗口”

“编辑”

第一个朗读是由应用窗口获得焦点触发的,第二个朗读是由 TextBox 获得焦点(自动发生)触发的。

这种体验还不够好,因为 Narrator 没有报告 TextBox 的用途。为了解决这个问题,我们需要利用 UI 自动化框架,这就像在 TextBox 上设置以下辅助功能属性一样简单。

 

<Viewbox HorizontalAlignment="Stretch"   VerticalAlignment="Stretch" Grid.Column="1"  Grid.Row="1"  >
            <TextBox x:Name="userName" AutomationProperties.Name="Enter your name"/> 
 </Viewbox>
<Viewbox Grid.Column="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"  Grid.Row="1" >
            <Button Content="Enter" Click="Button_Click"/>
</Viewbox>
<Viewbox Grid.Column="1" HorizontalAlignment="Stretch"  VerticalAlignment="Stretch"  Grid.Row="3"  >
            <TextBlock x:Name="display" TextWrapping="Wrap" Text="" AutomationProperties.LiveSetting="Polite" />
</Viewbox>

 

 

如果你添加此属性,然后重新运行带 Narrator 的 AccessibiltyExample,你将听到以下声音:

“AccessibiltyExample.windows 窗口”

“请输入你的名字”

“编辑”

请注意,当你通过按 Tab 键等方式使 Enter Button 获得焦点时,Narrator 会说:

“输入按钮”

这可以自动工作,因为Button 控件内置了向 UI 自动化框架报告其内容的行为。

但是,如果屏幕上添加了文本,Narrator 也没有任何提示。为了解决这个问题,我们可以将以下辅助功能属性添加到显示 TextBlock 中,以将其标识为实时区域。

<TextBlock x:Name="display" TextWrapping="Wrap" Text=""
             AutomationProperties.LiveSetting="Polite" />

 

AutomationProperties.LiveSetting 属性可以设置为以下值之一:

Off—这是默认值。

Polite—应传达更改,但不应中断屏幕阅读器。

Assertive—应立即传达更改,即使屏幕阅读器正在说话。

 

实时区域是内容会发生更改的区域。

但是,实时区域的更改不会自动检测到。你必须在 C# 中触发它们。在我们的示例中,我们只需要在现有的Button_Click 事件处理程序中添加一行额外的代码。

 

 private void Button_Click(object sender, RoutedEventArgs e)
        {
            this.display.Text = this.userName.Text;
           
            //Reporting this text

            TextBlockAutomationPeer.FromElement(this.display).RaiseAutomationEvent(
            AutomationEvents.LiveRegionChanged);
        }

 

你还必须添加 Windows.UI.Xaml.Automation.Peers 命名空间。这些类以 ElementNameAutomationPeer 的模式命名,并包含一些专为可访问性和自动化测试设计的成员。

本地化辅助功能属性

本地化有助于我们触达更广泛的受众。如果我们在实施可访问性,就应该始终本地化我们的应用。如果你想实施这一点,请参阅我的另一篇文章 通用 Windows 应用的本地化

幸运的是,辅助功能属性可以像任何其他属性一样进行本地化。要做到这一点,请删除显式设置,并为元素指定一个x:Uid

 

<TextBox x:Name="userName" x:Uid="userName" AutomationProperties.Name="Enter your name"/>

 

现在,在资源文件中添加一个条目 userName.AutomationProperties.Name,其英文值为“Enter your name”。你可以用类似的方式添加多种语言。

现在,让我们在 Windows Phone 模拟器中以法语为默认语言测试我们的应用。通过按住音量增大键然后按开始按钮打开 Narrator,现在你会听到:

 

 

“AccessibiltyExample.windowsPhone 窗口”

“Entrez votre nom

“编辑”

 

历史

文章 V1。

© . All rights reserved.