公开基础无障碍信息

基本辅助功能信息通常分为名称、角色和值。 本主题介绍帮助应用公开辅助技术所需的基本信息的代码。

可访问名称

可访问名称是屏幕阅读器用来报读 UI 元素的简短描述性文本字符串。 设置 UI 元素的可访问名称,使其具有理解内容或与 UI 交互的重要意义。 此类元素通常包括图像、输入字段、按钮、控件和区域。

下表介绍了如何在 XAML UI 中定义或获取各种类型的元素的可访问名称。

元素类型 DESCRIPTION
静态文本 对于 TextBlockRichTextBlock 元素,可访问的名称会自动从可见(内部)文本中确定。 该元素中的所有文本都用作名称。 请参阅内部文本名称。
映像 XAML Image 元素没有直接对应 HTML img 和类似元素的 alt 属性。 使用 AutomationProperties.Name 来提供名称,或者使用字幕说明技术。 请参阅 图像的可访问名称
表单元素 窗体元素的可访问名称应与为该元素显示的标签相同。 请参阅 标签和 LabeledBy
按钮和链接 默认情况下,按钮或链接的可访问名称基于可见文本,使用与内文本名称中所述相同的规则。 如果按钮仅包含图像,请使用 AutomationProperties.Name 来提供一个文本描述,说明按钮的预期操作。

大多数容器元素(如面板)不会将其内容作为无障碍名称。 这是因为应该报告名称和相应角色的是项目本身,而不是其容器。 容器元素可能会报告它是一个有子元素的元素,这样在Microsoft UI自动化表示中,辅助技术逻辑可以遍历这些子元素。 但是辅助技术的用户通常不需要知道容器,因此大多数容器都没有命名。

角色与价值

XAML 词汇中包含的控件和其他 UI 元素实现了 UI 自动化,以支持在其定义中报告角色和值。 可以使用 UI 自动化工具检查控件的角色和值信息,也可以阅读每个控件的 AutomationPeer 实现的文档。 UI 自动化框架中的可用角色在 AutomationControlType 枚举中定义。 UI 自动化客户端(如辅助技术)可以通过调用 UI 自动化框架通过使用控件的 AutomationPeer公开的方法来获取角色信息。

并非所有控件都有一个值。 具有值的控件通过该控件支持的对等和模式向 UI 自动化报告此信息。 例如, TextBox 窗体元素确实有一个值。 辅助技术可以作为 UI 自动化的客户端,不仅能够发现是否存在一个值,还能够识别该值是什么。 在本例中,TextBox 通过 TextBoxAutomationPeer 定义支持 IValueProvider 模式。

注释

在使用 AutomationProperties.Name 或其他技术显式提供辅助名称的情况下,切勿在辅助名称中包含与控件角色或类型信息相同的文本。 例如,不要在名称中包含“button”或“list”等字符串。 角色和类型信息来自 UI 自动化中不同的属性(LocalizedControlType),该属性由 UI 自动化的默认控件支持提供。 许多辅助技术将 LocalizedControlType 追加到辅助名称中,因此在辅助名称中重复角色名称可能会导致不必要的词语重复。 比如,如果为 按钮 控件命名为可访问名称“button”或将“button”包含为名称的最后一部分,屏幕阅读器可能会将其读取为“按钮按钮”。 您应该使用“讲述人”功能来测试辅助功能信息的这一方面。

对 UI 自动化树视图的影响

UI 自动化框架具有树视图的概念,其中 UI 自动化客户端可以使用三个可能视图(原始视图、控件和内容)检索 UI 中的元素之间的关系。 控件视图是 UI 自动化客户端经常使用的视图,因为它提供了交互式 UI 中元素的良好表示和组织。 测试工具通常使你能够选择在工具呈现元素组织时要使用的树视图。

默认情况下,当 UI 自动化框架表示 Windows 应用的 UI 时,任何 控件 派生类和其他几个元素将显示在控件视图中。 但有时,由于 UI 组合,不希望元素出现在控件视图中,因为该元素复制信息或呈现对辅助功能方案不重要的信息。 使用附加属性 AutomationProperties.AccessibilityView 更改元素向树视图公开的方式。 如果将元素置于 Raw 树中,则大多数辅助技术不会将其报告为其视图的一部分。 若要查看在现有控件中的工作方式的一些示例,请在文本编辑器中打开 generic.xaml 设计参考 XAML 文件,并在模板中搜索 AutomationProperties.AccessibilityView

内文中的名称

为了更轻松地使用可见 UI 中已经存在的字符串来获取辅助名称值,许多控件和其他 UI 元素都支持基于元素内部文本或内容属性的字符串值自动确定默认辅助名称。

  • TextBlockRichTextBlockTextBoxRichTextBlock 每个将 Text 属性的值设为默认可访问名称。
  • 任何 ContentControl 子类都使用迭代的“ToString”技术在其 内容 值中查找字符串,并将这些字符串提升为默认可访问名称。

注释

根据 UI 自动化的规定,可访问名称的长度不能超过 2048 个字符。 如果用于自动生成可访问名称的字符串超过该限制,则可访问名称将在那个点被截断。

图像的可访问名称

若要支持屏幕阅读器并提供 UI 中每个元素的基本标识信息,有时必须提供非文本信息的替代项,如图像和图表(不包括任何纯装饰元素或结构元素)。 这些元素没有内部文字,因此辅助名称将不会有计算值。 可以通过设置 AutomationProperties.Name 附加属性来直接设置可访问名称,如下例所示。

XAML

<!-- Comment -->
<Image Source="product.png"
  AutomationProperties.Name="An image of a customer using the product."/>

或者,请考虑包括一个文本标题,该标题显示在可见的 UI 中,并且用作与图像内容相关联的标签的辅助功能信息。 下面是一个示例:

XAML

<Image HorizontalAlignment="Left" Width="480" x:Name="img_MyPix"
  Source="snoqualmie-NF.jpg"
  AutomationProperties.LabeledBy="{Binding ElementName=caption_MyPix}"/>
<TextBlock x:Name="caption_MyPix">Mount Snoqualmie Skiing</TextBlock>

Label 和 LabeledBy

将标签与表单元素关联的首选方法是使用 TextBlock,通过 x:Name 表示标签文本,然后在表单元素上设置 AutomationProperties.LabeledBy 附加属性,以通过其 XAML 名称引用标记的 TextBlock。 如果使用此模式,辅助技术可以使用标签文本作为表单字段的可访问名称。 下面是一个演示此技术的示例。

XAML

<StackPanel x:Name="LayoutRoot" Background="White">
   <StackPanel Orientation="Horizontal">
     <TextBlock Name="lbl_FirstName">First name</TextBlock>
     <TextBox
      AutomationProperties.LabeledBy="{Binding ElementName=lbl_FirstName}"
      Name="tbFirstName" Width="100"/>
   </StackPanel>
   <StackPanel Orientation="Horizontal">
     <TextBlock Name="lbl_LastName">Last name</TextBlock>
     <TextBox
      AutomationProperties.LabeledBy="{Binding ElementName=lbl_LastName}"
      Name="tbLastName" Width="100"/>
   </StackPanel>
 </StackPanel>

辅助说明(可选的)

可访问性描述提供有关特定 UI 元素的额外辅助功能信息。 通常在无障碍名称无法充分传达元素的目的时,才提供无障碍描述。

仅当用户通过按 CapsLock+F 请求有关该元素的详细信息时,讲述人屏幕阅读器才会读取元素的可访问说明。

辅助名称用于标识控件,而不是完全记录其行为。 如果简短说明不足以解释控件,除了设置 AutomationProperties.HelpText 附加属性之外,还可以使用 AutomationProperties.Name

提早并频繁测试可访问性

最终,支持屏幕阅读器的最佳方法是自行使用屏幕阅读器测试应用。 这将展示屏幕阅读器的操作方式以及应用可能缺少的基本辅助功能信息。 然后可以相应地调整 UI 或 UI 自动化属性值。 有关详细信息,请参阅 辅助功能测试

可用于测试可访问性的工具之一称为 AccScopeAccScope 工具特别有用,因为你可以看到 UI 的图示,表示辅助技术如何将你的应用看作一个自动化树。 特别是,有一个讲述人模式,它提供讲述人如何从应用获取文本以及如何组织 UI 中的元素的视图。 AccScope 经过设计,因此可以在应用的开发周期中使用,即使在初步设计阶段也是如此。 有关详细信息,请参阅 AccScope

动态数据中的可访问名称

Windows 支持许多控件,这些控件可用于通过称为 数据绑定的功能显示来自关联数据源的值。 使用数据项填充列表时,可能需要使用在填充初始列表后设置数据绑定列表项的可访问名称的技术。 有关详细信息,请参阅 XAML 辅助功能示例中的“方案 4”。

可访问名称和本地化

为了确保辅助名称也是本地化的元素,应使用正确的技术将可本地化字符串存储为资源,然后使用 x:Uid 指令 值引用资源连接。 如果可访问名称是通过显式设置的 AutomationProperties.Name 用法,请确保该字符串也具有可本地化性。

请注意,附加属性(如 AutomationProperties 属性)使用资源名称的特殊限定语法,以便资源引用应用于特定元素的附加属性。 例如,UI 元素 AutomationProperties.Name 应用于 MediumButton 的资源名称为:MediumButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name