DevExpress WinForms中文教程 - 如何创建可访问的WinForms应用?(一)

为用户创建易访问的Windows Forms应用程序不仅是最佳实践的体现,还是对包容性和以用户为中心的设计承诺。在应用程序开发生命周期的早期考虑与可访问性相关的需求可以节省长期运行的时间(因为它将决定设计决策和代码实现)。

一个可访问的WinForms应用程序提供了各种好处,包括:

  • 扩大用户群
  • 包含通过键盘访问的用户体验
  • 自动化UI测试

DevExpress WinForms有180+组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。同时能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!

获取DevExpress WinForms v23.2正式版下载(Q技术交流:909157416)

Tip #1:考虑键盘访问

键盘兼容性对于可访问的应用程序至关重要,因为辅助工具(如叙述者和NVDA)依赖于键盘导航来帮助用户。

有效的键盘导航必须满足以下基本要求:

  • 增强用户体验:用户应该能够使用键盘无缝地执行所有基本任务,这并不意味着你需要避免像拖放这样的操作。您应该考虑对键盘友好的其他用户体验选项,例如,复制粘贴功能或上下移动项目的按钮可以作为拖放操作的替代品。
  • 没有键盘陷阱(适当的焦点管理):用户应该始终能够使用键盘从特定的UI元素或部分导航,确保正确管理键盘焦点,以便用户可以自由直观地导航。
  • 可预测的标签顺序:可聚焦的UI元素必须以合理且有效的逻辑顺序接收焦点。
  • 重点突出:因为不是每个人都使用屏幕阅读器,所以提供视觉反馈很重要,它指示当前哪个UI元素是激活的/选择的。

使用以下Windows Forms APIs来增强应用程序中的键盘导航功能:

  • Control.TabIndex - 使用此属性实现焦点顺序(例如在具有数据编辑器、按钮和其他UI元素的数据表单中)。
  • Control.TabStop – 对于不需要交互的UI元素禁用此设置,以绕过不必要的导航。
  • Control.Focus - 该方法允许您以编程方式关注UI元素来实现自定义导航顺序(例如,您可以实现基于向上/向下箭头的导航)。

在2023年12月(v23.2),官方技术团队在DevExpress WinForms产品线中引入了与键盘相关的增强功能,使用以下功能来增强基于DevExpress的应用程序中与键盘相关的体验:

  • 键盘快捷键
    DevExpress WinForms UI控件附带预定义的快捷方式。
    全面的快捷方式相关API允许您为特定的UI元素指定自定义快捷方式(例如BarItem.ItemShortcut, EditorButton.Shortcut, Diagram Shortcuts, RichEdit Shortcuts)

DevExpress WinForms中文教程

  • 加速键
    通过在特定文本之前添加与符号(&),您允许用户快速激活DevExpress控件或执行命令。
  • 功能区上下文选项卡
    与传统的静态工具栏不同,DevExpress WinForms Ribbon控件中的上下文选项卡动态地适应使用上下文,根据手头的任务显示相关选项。如果在使用键盘的主UI中没有特定的操作,您可以将该操作添加到上下文选项卡中(用户需要按Alt来访问可用的操作)。

DevExpress WinForms中文教程

Microsoft Office应用程序中也引入了类似的操作(例如,当您关注Word文档中的表格时,Ribbon UI会自动显示带有表格相关命令的上下文选项卡)。

  • 自动标签顺序
    当涉及到开发可访问数据表单时,DevExpress WinForms布局控件是必不可少的。有了它,您不再需要为数据表单中显示的每个UI元素指定TabIndex属性,布局控件根据布局结构自动计算标签索引。

DevExpress WinForms中文教程

Tip #2:为UI元素提供相关的可访问信息

辅助技术(如Accessibility Insights)依赖于可访问树、UI元素的结构和相关信息,使用辅助工具来识别和解决与无障碍相关的问题。

DevExpress WinForms中文教程

DevExpress WinForms控件自动生成可访问性树,但是有些信息必须手工指定。例如,当您使用PictureEdit时,应该给它一个清晰且用户友好的可访问名称。

使用以下属性为单个控件自定义可访问信息:

  • Control.AccessibleName - 指定可访问性客户端应用程序使用的控件名称(对用户可见的标签)。例如,如果您有一个显示名称的文本框,则将其TextBox.AccessibleName属性设置为“First name”。当文本框收到焦点时,屏幕阅读器将读出“First Name”。
  • Control.AccessibleRole - 指定控件的可访问角色,当涉及到自定义控件时,在通知用户UI元素类型(例如,MenuButton、DropList、Table等)时,设置此属性至关重要。
  • Control.AccessibleDescription - 描述控件,可访问性客户端应用程序使用此描述。屏幕阅读器对该属性的处理方式不同,例如当UI元素接收到focus时,NVDA会读取AccessibleDescription,但Narrator会忽略这个属性。

DevExpress WinForms UI控件实现了可访问性客户端应用程序使用的标准API,所有UI元素都被标记,属性值被公开,并引发适当的事件。例如:

  • DevExpress LayoutControl自动将布局项的可访问名称与其标题关联起来。
  • DevExpress TextEdit控件从关联的DevExpress LabelControl中获得可访问的名称。
  • 在内置表单中显示DevExpress数据编辑器公开了可访问的名称。
  • 数据感知组件(如GridControl)会自动生成一个可访问的树,其中UI元素具有相应的名称和角色。

DevExpress WinForms中文教程

在某些情况下,可访问信息可能需要修改,考虑一个带有自定义模板的DevExpress Tile控件。父控件无法确定当tile接收焦点时屏幕阅读器应该读出(来自模板的)哪些信息,在这种情况下,您可以处理DXAccessible.QueryAccessibleInfo事件,根据需要指定可访问的名称、角色和描述:

void DXAccessible_QueryAccessibleInfo(object sender, DXAccessible.QueryAccessibleInfoEventArgs e) {
if (e.Role == AccessibleRole.ListItem && e.OwnerControl == tileControl1) {
TileItem item = e.Owner as TileItem;
if (item != null && item.Elements.Count > 1)
e.Name = item.Elements[0].Text; e.Description = item.Elements[1].Text;
}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/443173.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity触发检测Trigger踩坑合集

正常状态 绿色方块:刚体碰撞盒检测触发碰撞脚本 蓝色方块:碰撞盒 检测脚本: 正常进出: 踩坑1 绿色方块:刚体碰撞盒检测触发碰撞脚本 蓝色方块:碰撞盒 保持绿色和蓝色方块的接触 对蓝色方块&#xff1a…

CentOS 7 部署 ZeroTier Moon 节点

ZeroTier是一套使用UDP协议构建的SD-WAN网络软件,其主要有三部分组成:行星服务器Planet、月亮服务器Moon、客户端节点Leaf,行星服务器是ZeroTier的根节点,可以采用ZeroTier官方的服务器,也可以使用开源代码自行搭建。 …

12.Golang中类的表示与封装

目录 概述类的表示代码结果 类的封装代码结果 结束 概述 Golang中类的表示与封装 类的表示 代码 注释掉的代码,并不能拿来当赋值或获取值来使用。 package mainimport "fmt"// 类大写则代表,可以被其它包使用 type Hero struct {// 属性方法大…

【pdf密码】怎么打印加密的PDF文件?

PDF文件是可以打开查看的,但是现在不能编辑、不能打印,功能栏中的功能都是灰色的,这种设置了加密的PDF文件该如何加密? 如果PDF中的大多数功能按钮以及打印按钮都是灰色的状态,那就证明是文件的问题导致不能打印的。 …

FSM有限状态机理解和实现,附上源代码

1、前言 之前在unity中看到动画状态机的转换,可以看到下图,在开发中还是很方便。 2、状态机是啥 状态机(state machine)是一种计算模型,用于描述系统或程序在不同状态之间转换的行为。 一般我们定义的状态都是有限的。所以所以FSM被称为有限状态机。 状态机有 3 个组成…

单例模式有几种写法?请谈谈你的理解?

为什么有单例模式? 单例模式(Singleton),也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个全局对象,这样有利…

Mysql聚合函数

聚合函数又称分组函数 多行(一组)数据 返回一个结果 数据表 链接:https://pan.baidu.com/s/1dPitBSxLznogqsbfwmih2Q 提取码:b0rp --来自百度网盘超级会员V5的分享 聚合函数会自动排除掉null字段 AVG SUM 适用于数值类型 MIN MAX 适用于数值…

Python中类的相关术语(附带案例)

目录 1、面向对象 2、类 3、实例 4、初始化方法 5、魔法方法 6、字符串方法 7、self 8、数据、属性、操作、行为 9、父类、基类、超类 or 子类、派生类 10、多态 11、重载多态 and 重写多态 12、名称解释 1、面向对象 在Python中,面向对象编程&…

实现单点登录

指再多系统应用群中登录一个系统,便可在其他所有系统中得到授权而无需再次登录,包括单点登录与单点注销两部分。 相比于单系统登录,sso需要一个独立的认证中心,只有认证红心能接受用户的用户名密码等安全信息,其他系统…

nodejs详细介绍2以及vue脚手架

前言 首先给宝子们说声抱歉,因为自己在使用vscode执行vue脚手架的时候出现了很多问题,在经过解决之后还是有一个对应的我弄了一天没弄好,就是“vscode的终端将被任务重用,按任意键关闭”然后导致的是自己没心情学习一点&#xff…

人工视觉仍然需要图像采集卡

最初,图像采集卡被用作模拟视频数字转换器和图像缓冲器,但如今它们能够执行复杂的任务,例如图像处理。图像采集卡的设计不断发展,旨在提高系统性能并减少计算机处理需求。 除了图像采集之外,图像采集卡还执行机器视觉…

WebService的services.xml问题

WebService有多种实现方式,这里使用的是axis2 问题: 在本地开发,访问本地的http://localhost:8080/services/ims?wsdl,正常访问 但是打成jar包,不管是linux还是window启动,都访问不到,报错…