在 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

关于 AutomationProperties.Name 的一些总结的更多相关文章

  1. WPF 自定义列表筛选 自定义TreeView模板 自定义ListBox模板

    有很多项目,都有数据筛选的操作.下面提供一个案例,给大家做参考. 左侧是数据源,搜索框加TreeView控件,右侧是ListBox控件.在左侧数据列点击添加数据,然后点击确定,得到所筛选的数据. 下面 ...

  2. WPF CheckBox样式 ScrollViewer样式 WrapPanel、StackPanel、Grid布局

    本节讲述布局,顺带加点样式给大家看看~单纯学布局,肯定是枯燥的~哈哈 那如上界面,该如何设计呢? 1.一些布局元素经常用到.Grid StackPanel Canvas WrapPanel等.如上这种 ...

  3. UWP Composition API - 锁定列的FlexGrid

    需求是第一列锁定,那么怎么让锁定列不跟着滚动条向做移动呢? 其实很简单,让锁定列跟scrollviewer的滚动做反方向移动. 先看一下这个控件的模板,嗯,其实很简单,就是ListView的模板,不同 ...

  4. UWP Composition API - GroupListView(二)

    还是先上效果图: 看完了上一篇UWP Composition API - GroupListView(一)的童鞋会问,这不是跟上一篇一样的吗??? 骗点击的?? No,No,其实相对上一个有更简单粗暴 ...

  5. UWP Composition API - GroupListView(一)

    需求: 光看标题大家肯定不知道是什么东西,先上效果图: 这不就是ListView的Group效果吗?? 看上去是的.但是请听完需求.1.Group中的集合需要支持增量加载ISupportIncreme ...

  6. (UWP开发)更为合理的一种ListView下拉刷新(PullToRefresh)实现方法

    最近在做的一个项目需要用到下拉刷新,但是参考了现在网络上比较普遍的方法,觉得都不太好,因为要在外部套上一个SrollViewer,容易出现滚动错误.于是刚开始的时候就把思路定到了ListView内部的 ...

  7. xamarin UWP自定义圆角按钮

    uwp自带的button本身不支持圆角属性,所以要通过自定义控件实现. 通过设置Button的Background=“{x:Null}”设置为Null使背景为空,再设置Button.Content中的 ...

  8. Win10 UWP 开发系列:使用SplitView实现汉堡菜单及页面内导航

    在Win10之前,WP平台的App主要有枢轴和全景两种导航模式,我个人更喜欢Pivot即枢轴模式,可以左右切换,非常方便.全景视图因为对设计要求比较高,自己总是做不出好的效果.对于一般的新闻阅读类Ap ...

  9. WP8.1 模仿手机通讯记录的选择框

    2016年11月6日 更新: 其实 这个有一个非常简单的方法.非常简单... ListView SelectionMode="Multiple" 这个一XAML  代码就可以解决了 ...

随机推荐

  1. Python datatime 格式转换,插入MySQL数据库

    Python datatime 格式转换,插入MySQL数据库 zoerywzhou@163.com http://www.cnblogs.com/swje/ 作者:Zhouwan 2017-11-2 ...

  2. CoreJava逻辑思维-顺时针打印自定义矩阵

    CoreJava逻辑思维-顺时针打印自定义矩阵 这两天回顾了一下刚入Java时的一些比较有意思的逻辑题,曾经也费劲脑汁的思考过的一些问题,比如百钱百鸡最简单的算法啦之类的,而今天博主想说的是一个循环打 ...

  3. ERROR: Java 1.7 or later is required to run Apache Drill.

    问题 Apache 的 drill 执行启动命令 drill-embedded 报错: ERROR: Java 1.7 or later is required to run Apache Drill ...

  4. scott表结构

  5. geoserver集成以及部署arcgis server瓦片数据

    关注重点: 一般来说,geoserver是不支持arcgis server格式瓦片数据部署的,至少我本机的geoserver版本(2.8.5)以及之前的版本并没有集成进来,不知道目前官网的最新版是否支 ...

  6. bzoj 1179: [Apio2009]Atm

    Description Input 第 一行包含两个整数N.M.N表示路口的个数,M表示道路条数.接下来M行,每行两个整数,这两个整数都在1到N之间,第i+1行的两个整数表示第i条道路 的起点和终点的 ...

  7. 20行JS代码实现贪吃蛇

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. xlwt 官网的例子

    from time import * from xlwt.Workbook import * from xlwt.Style import * style = XFStyle() wb = Workb ...

  9. 找回Git中丢失的Commit

    在使用Git的过程中,有时候会因为一些误操作,比如reset.rebase.merge等.特别是在Commit之后又执行了git reset --hard HEAD强制回滚本地记录以及文件到服务器版本 ...

  10. 使用C#开发数据库应用系统 习题

    错题积累 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: