首页 > 其他分享 >DevExpress WinForms中文教程 - 如何创建可访问的WinForms应用?(一)

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

时间:2024-01-30 13:33:06浏览次数:31  
标签:控件 教程 DevExpress 键盘 访问 WinForms UI

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

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

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

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

获取DevExpress WinForms v23.2正式版下载

DevExpress技术交流群9: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中文教程
  • 加速键
    通过在特定文本之前添加与符号(&),您允许用户快速激活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;
}
}

标签:控件,教程,DevExpress,键盘,访问,WinForms,UI
From: https://www.cnblogs.com/AABBbaby/p/17996915

相关文章

  • 无涯教程-ExpressJS - 模板(Templating)
    Pug是Express的模板引擎,Pug是一个非常强大的模板引擎,具有多种函数,包括filter,includes,inheritance,interpolation等。要将Pug与Express一起使用,无涯教程需要安装它。npminstall--savepug现在已经安装了Pug,将其设置为您的应用程序的模板引擎。将以下代码添加到您的index.js文......
  • 无涯教程-ExpressJS - 中间件(Middleware)
    中间件(Middleware)函数是可以访问请求对象(requestobject),响应对象(responseobject)以及应用程序的请求(request)-响应(response)中的下一个中间件函数。这些函数用于修改req和res对象,以执行诸如解析请求正文(responstbodies),添加响应标头(responseheaders)等任务。这......
  • STM32CubeMX教程29 USB_HOST - 使用FatFs文件系统读写U盘
    1、准备材料正点原子stm32f407探索者开发板V2.4STM32CubeMX软件(Version6.10.0)keilµVision5IDE(MDK-Arm)ST-LINK/V2驱动野火DAP仿真器XCOMV2.6串口助手2、实验目标使用STM32CubeMX软件配置STM32F407开发板USB_OTG_FS为工作在MassStorageHostClass(大容量存储主机类)模......
  • 无涯教程-ExpressJS - HTTP方法
    请求中提供了HTTP方法,该方法指定了客户端已请求的操作。下表列出了最常用的HTTP方法-S.No.Method&Remark1GETGET方法用于获取数据2POSTPOST方法用于提交数据3PUTPUT方法用于修改数据4DELETEDELETE方法用于删除数据GETMethodGET请求通过在请求的URL部......
  • Walrus 实用教程|Walrus + Gitlab,打通CI/CD 自动化交付!
    Walrusfile是Walrus0.5版本推出的新功能,用户可以通过一个非常简洁的YAML描述应用或基础设施资源的部署配置,然后通过WalrusCLI执行walrusapply或在WalrusUI上进行import,将Walrusfile提交给Walrusserver,由Walrusserver完成对应用或基础设施资源的部署/配置/......
  • 无涯教程-ExpressJS - 路由(Routing)
    Web框架在不同的路径上提供HTMLpage,script,images等资源,以下函数用于在Express应用程序中定义routes路由-app.method该方法可以应用于任何HTTP请求方法–get,set,put,delete,处理程序是一个回调函数,当在相关routes上找到匹配的请求类型时执行。如,varexpress=require('express'......
  • JVM 极简教程
     每执⾏⼀个Java⽅法,就将⽅法存⼊Java栈,每执⾏⼀个本地⽅法,也就是native⽅法,就将⽅法存⼊本地⽅法栈中,⽅法执⾏完后就从栈中移除程序计数器⽤来记录待执⾏的下⼀条字节码指令地址,⽅法执⾏过程中产⽣的Java对象会存⼊堆中,垃圾回收器会回收已经没有被使⽤的Java对象,JIT编译器会在......
  • 无涯教程-Django - Apache配置
    到目前为止,在无涯教程的示例中,已经使用了DjangodevWeb服务器,但是此服务器仅用于测试,不适合生产环境。一旦投入生产,您就需要一个真实的服务器,如Apache,Nginx等,在本章中讨论Apache。通过Apache为Django应用提供服务是通过使用mod_wsgi完成的。因此,第一件事是确保您已安装Apache和......
  • 基于 docker 安装 nginx 详细教程
    1.创建普通用户用于管理docker在本教程中我们创建一个普通用户来进行后续的docker相关服务的配置与运维。当然本操作是非必须的,你可以直接使用root用户来直接操作,对整个流程没有影响。不想创建用户请直接跳过第一部分,从第二部分开始操作即可。创建普通用户lidyuseraddlidy......
  • 无涯教程-Swift - 修饰符
    协议中的常量,变量和函数受到限制,并允许通过访问控制以全局和局部方式进行访问。Swift4语言提供了三种不同的访问级别。它们是公共,内部和私有访问权限。S.NoAccessLevels&Definition1Public使实体可以在其定义模块的任何源文件中进行处理,而在导入定义模块的另一个模块......