在 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数字转字符串

    参考文献: tt=322 tem='%d' %tt 可用,已经试用

  2. 【ANT】时间戳

    属性 说明 举例 DSTAMP 设置为当前日期,默认格式:yyyymmdd 20170309 TSTAMP 设置为当前时间,默认格式:hhmm 2007 TODAY 设置为当前日期,带完整的月份 Ma ...

  3. JavaWeb框架_Struts2_(八)----->Struts2的国际化

    这一篇博文拖了蛮久了,现在先把它完成,结束struts2这个版块,当然这只是最基础的部分,做项目还需要更深的理解.下一个web后端的版块准备做Spring框架的学习-嗯,加油! 1. Struts2的 ...

  4. CET-4- translation1

    questions 2017/10/17 多年来,家长和老手都曾得到过这样一种信息(message):尽量利用任何机会表扬孩子,对他们所干的任何事情都要说好.据说这样做有助于提高孩子的自尊.但是近来许 ...

  5. 538. Convert BST to Greater Tree

    Given a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original B ...

  6. bzoj 2337: [HNOI2011]XOR和路径

    Description Input Output Sample Input Sample Output HINT Source Day2 终于把这个史前遗留的坑给填了... 首先异或的话由位无关性,可 ...

  7. jmeter远程分布执行遇到的网卡坑(A Test is currently running,stop or ....)

    周末加班做一个项目app的性能测试,单机负载时由于公司给每个人的网络带宽上传下载流量就1M,300个用户并发就已经网络IO饱和了,虽然和相关部门协调过资源问题,但是收效甚微,因此打算先用分布部署压力机 ...

  8. 使用Word进行文档修订版本的比较

    项目经理在实际的工作过程中,比如要写文档方案,就需要对文档的修订版本进行管理和控制.在以前的工作中,笔者使用的是UltraEdit这个软件工具中的Ultra Compare这个子工具来进行的文档版本的 ...

  9. Python学习_11_类和实例

    类和实例 类是对象创建实例的模板,而实例则是对象的实体.类使用class关键字定义: class MyClass:    pass python中创建实例直接使用工厂函数(类名加上一对括号),和其他的 ...

  10. 安卓和 java 学习笔记

    1.访问权限为 private 的成员变量或方法,需要执行setAccessible() 方法,并将入口参数设置为 true; 否则不允许访问. 2.为了保证线程的安全,可以使用同步块 synchro ...