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

news2024/11/15 0:14:48

为用户创建易访问的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.coloradmin.cn/o/1423076.html

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

相关文章

Unity之第一人称角色控制

目录 第一人称角色控制 😴1、准备工作 📺2、鼠标控制摄像机视角 🎮3、角色控制 😃4.杂谈 第一人称角色控制 专栏Unity之动画和角色控制-CSDN博客的这一篇也有讲到角色控制器,是第三人称视角的,以小编…

The Sandbox 新赛事开启|参加VoxEdit 战士装备设计比赛吧!

来参加VoxEdit 迷你竞赛吧! 按此下载 VoxEdit 即可开始。 https://www.sandbox.game/en/create/vox-edit/ 主题:设计以战士为主题的装备。你可以选择任何装备模板。你也可以选择制作动画,以更精彩地呈现你的创意。 你可以创建单件装备或整套…

【Transformer】Attention Is All You Need

Abstract 主要的序列转导模型是基于复杂的循环或卷积神经网络,包括一个编码器和一个解码器。表现最好的模型还通过注意机制连接编码器和解码器。我们提出了一个新的简单的网络架构,变压器,完全基于注意力机制,完全摒弃递归和卷积…

Atcoder ABC338 A-D题解

又是一篇姗姗来迟的atcoder题解。 Link:ABC338 Problem A: 妥妥的签到题。 #include <bits/stdc.h> using namespace std; int main(){string str;cin>>str;if(int(str[0])<65 || int(str[0])>90){cout<<"NO"<<endl;return 0;}for…

力扣hot100 买卖股票的最佳时机 贪心 经典题

Problem: 121. 买卖股票的最佳时机 文章目录 思路复杂度Code 思路 假设今天卖出&#xff0c;那怎么样收益最大呢&#xff1f;之前买入价是最低的 复杂度 ⏰ 时间复杂度: &#xff1a; O ( n ) O(n) O(n) &#x1f30e; 空间复杂度: O ( 1 ) O(1) O(1) Code class Solut…

微信小程序(二十七)列表渲染改变量名

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.改变默认循环单元item变量名 2.改变默认循环下标index变量名 基础模板有问题可以先看上一篇 源码&#xff1a; index.wxml <view class"students"><view class"item"><te…

快速排序|超详细讲解|入门深入学习排序算法

快速排序介绍 快速排序(Quick Sort)使用分治法策略。 它的基本思想是&#xff1a;选择一个基准数&#xff0c;通过一趟排序将要排序的数据分割成独立的两部分&#xff1b;其中一部分的所有数据都比另外一部分的所有数据都要小。然后&#xff0c;再按此方法对这两部分数据分别进…

Unity 常见的图像压缩格式优缺点

在Unity中&#xff0c;将图像压缩至更小的大小&#xff0c;既可以加快加载速度&#xff0c;也可以减少内存的占用。根据不同的目标平台&#xff0c;Unity提供了以下几种常见的图像压缩格式&#xff1a; 1. RGBA Compressed: 是一种通过压缩的方式来存储RGBA&#xff08;红色、…

Flask框架开发学习笔记《6》前后端不分离基础框架

Flask框架开发学习笔记《6》前后端不分离基础框架 Flask是使用python的后端&#xff0c;由于小程序需要后端开发&#xff0c;遂学习一下后端开发。 主要包含如下文件&#xff1a; static 目录中存储了图片templates 目录中存储了 html 文件utils.py 包含了 log 函数server.p…

开发工具git分支冲突解决

在团队协作的软件开发过程中&#xff0c;Git是一款广泛使用的版本控制系统。然而&#xff0c;当多个开发者同时修改同一文件或代码段时&#xff0c;就会产生分支冲突。解决这些冲突需要仔细的协调和技术知识。本篇博客将介绍Git分支冲突的解决方法&#xff0c;以及开发工具和最…

Android 系统启动过程

当按下电源时&#xff0c;引导芯片代码会从预定义的地方(固化在ROM) 开始执行,加载引导程序BootLoader到RAM,然后执行。 启动内核的第一个进程idle(pid0),idle进程是Linux系统第一个进程&#xff0c;是init进程和kthreadd进程的父进程。 idle的主要作用 初始化进程以及内存管…

Modern C++ std::get<n>(tuple)的原理

1. 前言 前面我们讲过std::tuple的实现原理&#xff0c;但没有讲如何取出数据&#xff0c;本节着重讲讲这点。本节与之前的blog有较大关联&#xff0c;如果您没看&#xff0c;这里有链接&#xff0c;链接已按由浅入深排好序&#xff0c;您可以按顺序阅读。如果时间少可以直接看…

【新书推荐】4.2节 字符编码规则

本节内容&#xff1a;字符编码规则。 ■字符编码规则&#xff1a;ASCII码、ANSI字符集、Unicode字符集。 ■变形国标码&#xff1a;国标码是16位编码&#xff0c;高8位表示汉字符的区号&#xff0c;低8位表示汉字符的位号。 4.2.1 字符编码规则 计算机只能存储二进制数0和1&a…

API管理协作工具:Apipost

相信无论是前端&#xff0c;还是后端的测试和开发人员&#xff0c;都遇到过这样的困难。不同工具之间数据一致性非常困难、低效。多个系统之间数据不一致&#xff0c;导致协作低效、频繁出问题&#xff0c;开发测试人员痛苦不堪。 API管理的难点在哪&#xff1f; 开发人员在 …

【WPF.NET开发】优化性能:图形呈现层

本文内容 图形硬件呈现层定义其他资源 呈现层为运行 WPF 应用程序的设备定义图形硬件功能和性能级别。 1、图形硬件 对呈现层级别影响最大的图形硬件功能包括&#xff1a; 视频 RAM - 图形硬件中的视频内存量决定了可用于合成图形的缓冲区大小和数量。 像素着色器 - 像素着…

点餐APP开发需要用到的一些源代码

在数字化日益普及的今天&#xff0c;点餐APP已经成为人们日常生活的重要组成部分&#xff0c;从校园食堂到高级餐厅&#xff0c;从快餐外卖到定制化营养餐&#xff0c;点餐APP的多样性和便利性满足了不同用户的需求&#xff0c;本文将深入探讨在开发一款点餐APP时可能用到的源代…

24.Android中的列表--ListView

ListView 1.简单列表--ArrayAdapter <?xml version"1.0" encoding"utf-8"?> <ScrollView xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"xmlns:tools&qu…

C++ 入门(三)— 函数

文章目录 函数简介函数返回值Void 函数&#xff08;非值返回函数&#xff09;函数参数和参数局部范围函数的声明和定义具有多个代码文件的程序 函数简介 C 程序的方式工作。当程序遇到函数调用时&#xff0c;它将在一个函数内按顺序执行语句。函数调用是告诉 CPU 中断当前函数…

责任链模式在java中的实现

1 总览 2 概念 避免请求发送者与接收者耦合在一起&#xff0c;让多个对象都有可能接收请求&#xff0c;将这些对象连接成一条链&#xff0c;并且沿着这条链传递请求&#xff0c;直到有对象处理它为止。职责链模式是一种对象行为型模式。 3 实现 公共部分&#xff0c;一个系…

法大大入选2023德勤“中国明日之星”

1月30日&#xff0c;德勤审计及鉴定合伙人、华南区上市业务合伙人、资本市场服务部王杰森莅临法大大总部&#xff0c;为法大大颁发“2023德勤中国 高科技高成长 明日之星”奖杯&#xff0c;法大大联合创始人兼首席法务官梅臻代表领奖。 &#xff08;左为王杰森&#xff0c;右为…