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.mzph.cn/news/658565.shtml

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

相关文章

【Python基础知识】(19)三种内置生成式

文章目录 一、列表生成式二 、字典生成式三、集合生成式 一、列表生成式 # 1. 列表生成式,语法:[被追加的数据 循环语句 循环或者判断语句] lst2 [i * 10 for i in range(10, 20)] print(lst2) # 输出:[100, 110, 120, 130, 140, 150, 160…

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

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

Qt关于qss文件的添加使用

把ui设计得更加的养眼,肯定需要对控件的属性进行设置,qt中就是关于qss文件的使用。 那么如何创建和添加qss文件呢 1.新建一个文本文件的txt 2.将文本文件的后缀改为qss(类比html) 3.放置到项目的资源文件夹下 4.添加资源文件 5.在…

代码随想录算法训练营第二二天| 二叉搜索树的最近公共祖先、二叉搜索树中的插入操作、删除二叉搜索树中的节点

目录 二叉搜索树的最近公共祖先二叉搜索树中的插入操作删除二叉搜索树中的节点普通二叉树的删除方式 LeetCode 235. 二叉搜索树的最近公共祖先 LeetCode 701.二叉搜索树中的插入操作 LeetCode 450.删除二叉搜索树中的节点 二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到…

windows安装oracle之后怎么连接使用

目录 1.打开SQl Developer 2.选择JDK 3.登录 4.创建表空间,用户 安装oracle的详细教程 WINDOWS安装Oracle11.2.0.4-CSDN博客 1.打开SQl Developer 找到 SQl Developer 2.选择JDK 根据你安装的oracle版本,因为我的oracle是安装的32位的,所以这里jdk也要选择32位 选择到ja…

1.迭代与递归 - JS

迭代与递归是函数进阶的第一个门槛。迭代就是对已知变量反复赋值变换;递归就是函数体内调用自身。 迭代 一个迭代是就是一个循环,根据迭代式对变量反复赋值。 求近似根(切线法); 迭代描述: x 0 x_0 x0…

Docker核心教程

1. 概述 官网:https://docs.docker.com/ Docker Hub 网站:https://hub.docker.com/ 容器较为官方的解释: 一句话概括容器:容器就是将软件打包成标准化单元,以用于开发、交付和部署。 容器镜像是轻量的、可执行的独立…

Threejs API——`OrbitControls`相机控件

文章目录 API用法API OrbitControls 相机控制用法 导入import {OrbitControls } from three/examples/jsm/controls/OrbitControls.js import {DRACOLoader,AmbientLight,Color,MOUSE,

Java项目要不要部署在Docker里?

部署Java项目有很多种方式,传统的方式是直接在物理机或虚拟机上部署应用,但为什么现在容器化部署变得越来越流行, 个人觉得原因有以下几个: 1、 环境一致性:使用Docker可以确保开发、测试和生产环境的一致性&#xff…

传感器类总结(一)MPU9250 3-2程序关于IIC的底层程序

关于IIC的逻辑和底层协议可以看之前总结的 #IIC 通信协议 1、读写数据 1.1、写数据 发送N个字节程序的流程: 1、发送起始信号 2、发送从机地址和写 3、等待从机发回应答信号 4、发送第一字节数据 等待应答 5、发送下一字节数据 等带应答或非应答信号 6、发送停止信号停止发送…

D365:Debug

文章目录 前言一、附加进程二、选择进程三、DebugDebug进ApplicationSuite文件方法一方法二 前言 使用 Visual Studio 调试 D365 一、附加进程 点击路径 Debug > Attach to Process 二、选择进程 勾选下面的Show processes from all users,选择w3wp.exe,点击At…

#nlp|jieba分词词性对照

jieba词性对照表 a 形容词 ad 副形词 ag 形容词性语素 an 名形词 b 区别词 c 连词 d 副词 df dg 副语素 e 叹词 f 方位词 g 语素 h 前接成分 i 成语 j 简称略称 k 后接成分 l 习用语 m 数词 mg mq 数量词 n 名词 ng 名词性语素 nr 人名 nrfg nrt ns 地名 nt 机构团体名 nz 其他…

HCIA学习第六天:OSPF:开放式最短路径优先协议

OSPF:开放式最短路径优先协议 无类别链路状态IGP动态路由协议 1.距离矢量协议:运行距离矢量协议的路由器会周期性的泛洪自己的路由表。通过路由的交互,每台路由器从相邻的路由器学习到路由,并且加载进自己的路由表中&#xff1b…

git学习及简单maven打包

前提: 已经有远程仓库地址 和账号密码了 已经安装git了 1.本地新建文件夹A用作本地仓库 2.在A文件夹下右键打开GIT BASH HERE 3.创建用户和密码,方便追踪提交记录 git config --global user.email “caoqingqing0108” //创建邮箱 git config --global …

电视盒子哪款好?年货节必看电视盒子排名

电视盒子哪款好?电视盒子是每天都会使用到的,和电视机是好搭档,但很多朋友买电视盒子的时候会踩雷,像虚标配置、偷工减料、无售后等,近来年货节大促购入电视盒子的消费者增多,小编这次要来分享的是好评度最…

centos搭建ftp踩坑记录

ftp服务器搭建参考b站视频 第1坑,开放端口后仍然无法连接: 这里不仅需要在防火墙打开20和21端口,还需要打开被动访问所使用的端口,也就是在配置文件vsftpd.conf中指定的被动访问接收端口。 pasv_enableYES pasv_min_port40000 p…

【Java】Springboot入门

学习目标 基于SpringBoot框架的程序开发步骤 熟练使用SpringBoot配置信息修改服务器配置 基于SpringBoot的完成SSM整合项目开发 一、SpringBoot简介 1. 入门案例 问题导入 SpringMVC的HelloWord程序大家还记得吗? SpringBoot是由Pivotal团队提供的全新框架&…

了解维特比算法:通信系统和自然语言处理中解码的基石

一、介绍 在数字通信和信号处理领域,维特比算法是一种革命性的纠错和解码方法。该算法以 1967 年推出的 Andrew Viterbi 的名字命名,已成为数字通信和自然语言处理领域的基础。本文旨在深入研究维特比算法的复杂性,探讨其理论基础、实际应用以…

四、ESP8266网络客户端

四、ESP8266网络客户端 基本操作1、[使用ESP8266HTTPClient库实现网络通讯](https://blog.csdn.net/X_King_Q/article/details/112061397)2、使用WiFiClient库实现网络通讯3、Stream4、HTTP协议数据通讯4.1客户端向服务器发送数据信息4.2客户端向服务器请求数据信息 基本操作 …

2401cmake,学习cmake1

1步:一个基本出发点 最基础项目是基于源码的一个可执行构建.对简单项目.三行CMakeLists.txt就满足了. 在步1路径下创建如下CMakeLists.txt文件: cmake_minimum_required(VERSION 3.10) //设置项目名 project(Tutorial) //添加可执行文件 add_executable(Tutorial tutorial.cx…