WPF TextBlock 屏幕阅读器无法读取内容

2023-12-02

我有一个包含自定义 WPF 窗口的应用程序,用于显示类似于 Win32 MessageBox 的弹出窗口。

作为要求的一部分,应用程序必须可通过屏幕阅读器(特别是 JAWS)访问。我在让屏幕阅读器读出对话框中的文本时遇到问题,但它会正常读取按钮中的值。

XAML中的代码如下

<Window x:Class="UserControls.ModalDialog"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
         xmlns:converters="clr-namespace:UserControls.Converters"
         mc:Ignorable="d" 
         d:DesignHeight="160" d:DesignWidth="400" MinHeight="85" MinWidth="400" MaxWidth="400" SizeToContent="Height" Height="Auto"
        WindowStartupLocation="CenterScreen" ResizeMode="NoResize" Title="Popup Dialog">

<StackPanel Orientation="Vertical">
    <StackPanel Orientation="Horizontal">
        <StackPanel.Resources>
            <converters:DisplayIconToSystemIconConverter x:Key="DisplayIconToSystemIconConverter"/>
        </StackPanel.Resources>
        <Image Source="{Binding IconType, Converter={StaticResource DisplayIconToSystemIconConverter}}" Height="32" Width="32" Margin="0,0,10,0"/>
        <TextBlock Name="TextBlock" Margin="20,10,0,0" TextWrapping="Wrap" Width="350" Foreground="DarkSlateGray" FontSize="10" FontWeight="Normal">
            <Run Text="Some text in the dialog"/>
        </TextBlock>
    </StackPanel>

    <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,10,5,0">
        <Button Name="Option1Button" Content="OK" Padding="5,0,5,0" Margin="0,20,5,0" MinWidth="100" IsDefault="True" />
        <Button Cancel Padding="5,0,5,0"  Margin="2,20,10,0" MinWidth="75" IsCancel="True" Visibility="Visible"/>
    </StackPanel>
</StackPanel></Window>

此代码在调用时正确显示弹出窗口,但屏幕阅读器仅读取标题两次。

如果我将一个空的 ListView 控件添加到窗口中作为 TextBlock 之后的下一个元素,则屏幕阅读器会正确读取对话框文本,尽管这两个控件没有显式链接,但我不能在控件中拥有像这样的额外控件,因为它会影响布局。

有没有办法让屏幕阅读器正确读取 TextBlock 文本,而无需在控件中也使用列表视图?


似乎 WPF 仍然没有为所有屏幕阅读器提供完全支持。我在网上搜索了一下,最初只发现没有答案的类似问题:

WPF:如何使屏幕阅读器从文本框中读取文本

继续后,我发现有一个阅读器似乎可以与 WPF 一起使用:NVDA。要了解更多信息,请查看英伟达社区页。我从以下问题中发现了这一点:

屏幕阅读器 (NVDA) 仅读取 WPF 窗口标题

此外,似乎您需要设置x:Uid属性(通常为 WPF UI 自动化保留)到要读出的字符串。我从以下问题中发现了这一点:

如何使我的 WPF 应用程序屏幕阅读器兼容?

最后,您可以在以下位置找到有关在 WPF 应用程序中提供可访问性的有用教程:如何编写 WPF 应用程序的代码以实现辅助功能在 Dev Pro 网站上。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF TextBlock 屏幕阅读器无法读取内容 的相关文章

  • WPF .exe - 大文件大小

    我正在开发一个 WPF 应用程序 发现 exe 大小超过 1 2MB 我想减少最终可执行文件的大小 代码不过200kb 我在项目中使用了一些 png图片 总共占用了20kb左右 为什么最终的可执行文件这么大 我使用 ILDASM 统计信息来
  • 使用 Assembly.ReflectionOnlyLoadFrom 加载 WPF 项目引用的程序集时出现奇怪的 FileLoadException

    我有一个自定义 MSBuild 任务 可以查看程序集内部以获取一些属性元数据 Assembly assembly Assembly ReflectionOnlyLoadFrom AssemblyFile 这是我们的自动化构建 发布流程所使用
  • WPF水平滚动条不可见

    我在 ScrollViewer 中有一个网格 网格只有一列和许多行 我将控件添加到网格行中 问题是 当我添加控件时 我可以看到 VerticalScrollBar 但尽管我添加了非常宽的控件 但我看不到 Horizo ntalScrollB
  • 当聚焦非 UILabel titleView 时,VoiceOver 会读取辅助功能标签两次

    我在使用 VoiceOver 时遇到了一个奇怪的问题 Goals Set a UIStackView含有多个UILabel就如我的navigationItem titleView 将堆栈视图标记为辅助功能元素并设置其accessibilit
  • 使用 RenderTargetBitmap 的 WPF 画布区域的快照

    我想在我的应用程序中创建画布区域的快照 我使用 Visual Brush 来获取快照并使用 PngEncoder 保存相同的快照 但生成的 PNG 只是一个空的黑色图像 我不确定问题是与创建的 BitmapSource 还是 PNGEnco
  • 用 C# 编写的带有点击移动的 WPF 游戏

    我试图将标签网格移动到鼠标的位置 就像冒险游戏中的移动一样 理想情况下 我会在途中删除并重新绘制它们 但是 现在我只想弄清楚如何将 int 转换为厚度或 pointtoscreen 到目前为止我有 player XMove int Mous
  • API 24 AccessibilityService.dispatchGesture() 方法如何工作?

    通过 API 24 我们有了一种向设备发送手势的方法 但是目前还没有可靠的文档或示例 我正在尝试让它工作 但目前手势每次都会点击 onCancelled 回调 这是我调用该方法的代码 TargetApi 24 private void pr
  • 在 MVVM 中,可以在视图后面的代码中访问 ViewModel 吗?

    在 MVVM 模式中 是否可以接受甚至可以访问视图代码后面的 ViewModel 属性 我有一个可观察的集合 它填充在 ViewModel 中 我需要在视图中使用它来绑定到带有链接列表的无限滚动条 IE private LinkedList
  • 测量 WPF 中的文本

    使用WPF 测量大量短字符串最有效的方法是什么 具体来说 我想确定每个字符串的显示高度 给定统一格式 相同的字体 大小 粗细等 以及字符串可能占用的最大宽度 最低级的技术 因此为创意优化提供了最大的空间 是使用 GlyphRuns 它没有很
  • 设置了 Image 和 IsCheckable 的 WPF MenuItem

    我注意到 如果您设置 IsCheckable 并为 MenuItem 设置图像 则在选中该项目时 该图像会消失 是否可以使其与旧的 Net 2 0 类似地工作 以便在检查时图像周围有边框 谢谢 保罗 您需要重新设置 MenuItems 的样
  • 当使用 XHTML 严格且无 JavaScript 时,替代 target="_blank"!

    我需要严格使用 XHTML 我需要确保我的网站无需使用 JavaScript 即可运行 我需要从我自己的应用程序打开一个新的帮助窗口 当然 当没有检测到 javascript 时 我想使用 target blank 但这不是 XHTML 严
  • 通过 RDP 使用 WPF 的 Direct2d

    我正在开发一个 C 应用程序 它使用 SharpDx 通过 Direct2d 渲染地图 该地图与 D3DImage 一起显示在 WPF 主机上 在本地计算机上 一切正常 但当我尝试通过远程桌面连接时 D3DImage 会丢失其后备缓冲区 并
  • 无法继承形状

    为什么我不能使用继承 a 的类Shapes class http msdn microsoft com en us library ms604615 28v vs 90 29 我需要延长Rectangle具有一些方法的类 但我想以与使用相同
  • TextBlock TextWrapping 不换行 #2

    好吧 那么this https stackoverflow com questions 6625177 textblock textwrapping not wrapping解决方案没有帮助 XAML 在这里
  • 什么时候可以使用Javascript,什么时候不可以?

    不使用太多 javascript jquery 是个好习惯吗 我们应该尽可能避免它 为了良好的可访问性 吗 什么时候可以使用 JavaScript 什么时候不能在网页设计和开发中使用 JavaScript 在什么场景 什么条件下 Updat
  • ContentDialog Windows 10 Mobile XAML - 全屏 - 填充

    我在项目中放置了一个 ContentDialog 用于 Windows 10 上的登录弹出窗口 当我在移动设备上运行此项目时 ContentDialog 未全屏显示 并且该元素周围有最小的填充 在键盘上可见 例如在焦点元素文本框上 键盘和内
  • Silverlight:在 XAML 中创建 DataTemplate,并在代码中分配它?

    是否可以在 XAML 中创建 DataTemplate 并通过代码将其应用到各种控件 如果是这样 我如何引用我在 XAML 中构建的 DataTemplate 如果你有
  • 列表元素之间的 Tab WPF

    我有一个列表框 其中每个项目都使用文本框表示 问题是我希望能够在移动到 xaml 窗口中的下一个元素之前在列表框中的所有项目之间进行切换 当前 和正常的 WPF 行为 是 当我按 Tab 键进入列表框时 第一个元素会突出显示 如果我再次按
  • 更改 Xamarin.Forms 应用中顶部栏和底部栏(ControlsBar、StatusBar)的颜色

    无论如何 即使后面需要特定于平台的代码 也可以更改顶部栏 蓝色的 和底部栏 黑色的 的颜色吗 我希望添加对浅色和深色模式的支持 因此我希望能够在运行时更改它 有可能的 Android Using Window SetStatusBarCol
  • 阻止用户取消选择列表框中的项目?

    我有一个列表框 里面有很多项目 用户可以单击某个项目来编辑其内容 如何防止用户取消选择所有项目 即 用户不应该无法选择任何内容 您的情况缺少一个案例 即清除列表后 您将选择列表中不再存在的项目 我通过添加额外的检查来解决这个问题 var l

随机推荐