关于 AutomationProperties.Name 的一些总结

在 XAML 代码中,我们偶尔会看到 AutomationProperies 的代码,如 AutomationProperties.Name="xxxxx", AutomationProperites 作为一个类,它里面包括若干个附加属性。这些属性可以为UI自动化测试框架 (Microsoft UI Automation accessibility framework) 提供有价值的信息,并且提高了应用的可访问性。

本文整理了以下几个关于 AuotmationProperties.Name 属性的作用以及常用方法的知识点,以下用法适合于任何 XAML 平台(如 WPF, UWP等)

1) AutomationProperties.Name 属性的作用是为控件指定可访问性名称,这个名称可以被类似于“讲述人”软件识别,从而提供了软件的可访问性(如对于盲人等),同样也可以在自动化测试中被使用。原则上,一个控件的 AutomationProperties.Name 最好与此控件显示的标签文本一致。

2) 非常幸运的是,在 XAML 平台中,如果某个控件(或元素)有可视化文本内容(如 Button 的 Content 属性设置了文本),那么该控件上显示的文本将作为它的 Accessible Name,因此对于这种类型的控件不需要专门为其设置 AutomationProperites.Name 属性。

3) 如果控件中并没有可示文本(比如按钮中仅显示了图片,或者有更复杂的元素),可以通过以下方法来为其设置 Accessible Name:

<Button x:Uid="IdentifyPlantButton" />

在 Strings/zh-cn/Resources.resx 中,我们添加一条项目为其设置 Accessible Name,如下:

Name:    IdentifyPlantButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name                    
Value:    Identify Plant Button

并且,通过这种方式来设置,也可以实现此属性值的本地化。

4) 以绑定的方式赋值:

AutomationProperties.Name="{Binding XXXXX}"

 如果需要,也可以适当地在 Binding 中加上 Mode=OneTime;如果 Button 元素在一个 ControlTemplate 时,也可以为它指定:

AutomationProperties.Name="{TemplateBinding XXXXX}"

5) 对于 TextBox 控件,可以将 Header 属性为作它的 Accessible Name,如下:

     <TextBox …
         Header="<Some localized string>"
         AutomationProperties.Name= "{Binding Header, RelativeSource={RelativeSource Self}}" />

6) 可以使用 AutomationProperties.LabelBy 属性,将另一控件的 Acceissble Name 作为当前控件的 Acceissble Name,如下:  

  <Slider …
        AutomationProperties.LabeledBy=”{Binding ElementName=CheeseAllowance}”/>
    <TextBlock …
        Name="CheeseAllowance"
        x:Uid="CheeseAllowanceLabel" />  

7) 通过代码设置:

using Windows.UI.Xaml.Automation;
myControl.SetValue(AutomationProperties.NameProperty, <The desired localized accessible name>);

 

最后,虽然可访问性对于一个 App 来说,不是硬性要求,但对于一个高质量的、以及负责任的 App 来说,这一点是必要的。
While accessibility isn't a hard requirement for an app, it is a requirement for a good app and for a responsible app. 

 

参考文章:
Giving your XAML element an accessible name: Part 1 – Introduction

Giving your XAML element an accessible name: Part 2 – Set the AutomationProperties.Name

Giving your XAML element an accessible name: Part 3 – Other interesting ways

What is the use of AutomationProperties.Name in XAML

posted @ 2017-02-18 17:30  WPInfo  阅读(3191)  评论(0编辑  收藏  举报