关于 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
关于 AutomationProperties.Name 的一些总结的更多相关文章
- WPF 自定义列表筛选 自定义TreeView模板 自定义ListBox模板
有很多项目,都有数据筛选的操作.下面提供一个案例,给大家做参考. 左侧是数据源,搜索框加TreeView控件,右侧是ListBox控件.在左侧数据列点击添加数据,然后点击确定,得到所筛选的数据. 下面 ...
- WPF CheckBox样式 ScrollViewer样式 WrapPanel、StackPanel、Grid布局
本节讲述布局,顺带加点样式给大家看看~单纯学布局,肯定是枯燥的~哈哈 那如上界面,该如何设计呢? 1.一些布局元素经常用到.Grid StackPanel Canvas WrapPanel等.如上这种 ...
- UWP Composition API - 锁定列的FlexGrid
需求是第一列锁定,那么怎么让锁定列不跟着滚动条向做移动呢? 其实很简单,让锁定列跟scrollviewer的滚动做反方向移动. 先看一下这个控件的模板,嗯,其实很简单,就是ListView的模板,不同 ...
- UWP Composition API - GroupListView(二)
还是先上效果图: 看完了上一篇UWP Composition API - GroupListView(一)的童鞋会问,这不是跟上一篇一样的吗??? 骗点击的?? No,No,其实相对上一个有更简单粗暴 ...
- UWP Composition API - GroupListView(一)
需求: 光看标题大家肯定不知道是什么东西,先上效果图: 这不就是ListView的Group效果吗?? 看上去是的.但是请听完需求.1.Group中的集合需要支持增量加载ISupportIncreme ...
- (UWP开发)更为合理的一种ListView下拉刷新(PullToRefresh)实现方法
最近在做的一个项目需要用到下拉刷新,但是参考了现在网络上比较普遍的方法,觉得都不太好,因为要在外部套上一个SrollViewer,容易出现滚动错误.于是刚开始的时候就把思路定到了ListView内部的 ...
- xamarin UWP自定义圆角按钮
uwp自带的button本身不支持圆角属性,所以要通过自定义控件实现. 通过设置Button的Background=“{x:Null}”设置为Null使背景为空,再设置Button.Content中的 ...
- Win10 UWP 开发系列:使用SplitView实现汉堡菜单及页面内导航
在Win10之前,WP平台的App主要有枢轴和全景两种导航模式,我个人更喜欢Pivot即枢轴模式,可以左右切换,非常方便.全景视图因为对设计要求比较高,自己总是做不出好的效果.对于一般的新闻阅读类Ap ...
- WP8.1 模仿手机通讯记录的选择框
2016年11月6日 更新: 其实 这个有一个非常简单的方法.非常简单... ListView SelectionMode="Multiple" 这个一XAML 代码就可以解决了 ...
随机推荐
- 自学Zabbix3.5-监控项item
itemItems是从主机里面获取的所有数据.通常情况下item为监控项,一般网络设备.服务器加入了zabbix监控,就需要监控它的cpu负载,那么实现这个方法的东西就叫item. 1. item构成 ...
- java 集合学习笔记
1.Collection(单列结合) List(有序,数据可重复) ArrayList:底层数据结构是数组,查询快,增删慢,线程不安全,效率高. Vector:底层数据结构是数组,查询快,增删慢,线程 ...
- intellij idea的安装步骤---经典
安装IntelliJ IDEA 一.安装JDK 1 下载最新的jdk,这里下的是jdk-8u66 2 将jdk安装到默认的路径C:\Program Files\Java目录下 二.安装IntelliJ ...
- ligerUI---ligerGrid分页排序的使用(从后台获取数据显示)
写在前面: 最近项目的前框框架用的是ligerUI,里面用到了ligerGrid表格,下面就来说说从后台获取数据并在前台页面进行完美展示.啊哈哈哈..(天啦,坐我旁边的丽姐貌似炒股 一个月可以搞几十万 ...
- 日期函数ADD_MONTHS,MONTHS_BETWEEN,LAST_DAY,NEXT_DAY
- 【java】抓取页面内容,提取链接(此方法可以http get无需账号密码的请求)
package 网络编程; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileOutpu ...
- 【MySQL】数据库字段类型
1.数值型 整型 TINYINT SMALLINT MEDIUMINT INT BIGINT 浮点型 FLOAT(m,n) - m表示总位数,n表示小数位数. DOUBLE(m,n) DECIMAL( ...
- JavaScript基础5——关于ECMAscript的函数
ECMAScript的函数概述(一般定义到<head>标签之间) (1)定义函数,JavaScript一般有三种定义函数方法: *第一种是使用function语句定义函数(静态方法) fu ...
- Node之Express服务器启动安装与配置
首先安装express-generator cnpm i -g express-generator 使用express --version查看express版本 生成express服务 express ...
- Python Xcode搭建Python环境以及使用PyCharm CE
pycharm CE下载 使用教程 1.基础学习网站 2.在Xcode7中搭建python开发环境,这个不行了就试试第二个,我是第二个可以正常输出了,第一个没有输出 3.Python学习-MAC下 ...