在 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. [.Net跨平台]部署DTCMS到Jexus遇到的问题及解决思路---部署

    上一篇我们环境已经准备完成,此时可以部署了,我们就以dtcms作为例子,http://bbs.dtcms.net/forum.php?mod=viewthread&tid=2420&e ...

  2. 原生JS的Ajax

    转自:https://www.cnblogs.com/yufann/p/JS-Ajax.html 1.创建一个Ajax对象 非IE6浏览器:var obj = new XMLHttpReuqest() ...

  3. 【java】工厂模式Factory,利用反射改进

    package 反射; interface Product{ public void produce(); } class socks implements Product{ @Override pu ...

  4. EntityFramework Core数据查询

    前言 本节我们再来讲讲EF Core,本节算是回归基础吧,当前项目EF Core还是处于1.1版本中,后续等待.net core等版本稳定了全部会更新到2.0版本中,到时再来更新相关文章分享给大家. ...

  5. iOS 字体设置,字体类型展示

    字体设置: [UIFont fontWithName:@"Helvetica" size:17.0]]; 字体名字,如图 UIFont fontWithName 后不知道字体的名字 ...

  6. iOS 网络监听、判断

    一 网络监听 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary ...

  7. SpringMVC对包的扫描范围扩大后,导致的事务配置不生效问题

    问题场景 项目使用的框架:Spring 4.1.4 + Hibernate 4.3.8 + MySQL. web.xml中对Spring的配置: <!-- 把 Spring 容器集成到 Web ...

  8. Cat 客户端采用什么策略上报消息树

    策略分类 目前搞清楚两种 第一种(蓝色):默认服务器列表中选一个,算法核心是根据应用名的哈希值取模.也就是说同一个应用始终打到同一台服务器上,如果这台服务器挂了,另选一台服务器. 第二种(红色):应用 ...

  9. css各种布局

    1.水平居中 前提:父容器.parent 和子容器.child 1)使用text-align和inline-block .parent{text-aling:center}; .child {disp ...

  10. Mysql数据库重要知识点(知了堂学习心得)

    Mysql数据库知识点 1.管理数据库语句: 使用数据库: use test; 添加数据库: create database 数据库名; create database test; 修改数据库: al ...