WPF:如何防止讲述人读取 AccessText 元素的下划线字符?

Posted

技术标签:

【中文标题】WPF:如何防止讲述人读取 AccessText 元素的下划线字符?【英文标题】:WPF: How to prevent reading underscore character of the AccessText element by Narrator? 【发布时间】:2020-05-26 21:11:46 【问题描述】:

我在尝试同时支持键盘和讲述人辅助功能时遇到了一个奇怪的问题。

在以下 XAML 代码中:

<StackPanel>
    <CheckBox Name="CheckBox"
              AutomationProperties.Name="Binding RelativeSource=RelativeSource Self, Path=Content.(AccessText.Text)">
        <AccessText >C_heck me</AccessText>
    </CheckBox>
</StackPanel>

默认的 Windows 10 讲述人读取“C underscore heck me CheckBox unchecked”。

有什么方法可以保持键盘导航并从讲述人那里获得读数为“Check me checkbox unchecked”?

请注意,上面的代码是一个示例,我有很多地方会出现类似问题。我已经尝试添加转换器并将其与 AutomationProperties.Name 一起使用,但它导致应用程序运行缓慢。

【问题讨论】:

【参考方案1】:

您使用自己的(例如)AccessTextToAutomationPropertiesNameConverter() 去除下划线的方法对于某些应用程序来说是一种有吸引力的方式。当您这样做时,对您的应用程序的性能有何影响(以及必须通过转换器运行多少控件)?你的转换器有一次性模式吗?另一种选择是为 AutomationProperties.Name 和 AccessText 设置单独的本地化字符串,但我可以看出这并不吸引人,因为它会增加本地化成本。

【讨论】:

感谢您的回答!最后,我使用了两个选项:转换器和单独的资源文件。转换器用于我依赖另一个元素的地方,例如 AutomationProperties.Name="Binding RelativeSource=RelativeSource AncestorType=TabItem, Path=Header, Converter=ct:UiaCharReplacementConverter"

以上是关于WPF:如何防止讲述人读取 AccessText 元素的下划线字符?的主要内容,如果未能解决你的问题,请参考以下文章

按钮中的 WPF AccessText 仅适用于 Alt

讲述人在扫描模式下读取隐藏元素

WPF:按 ALT 键时,按钮上的热键不显示下划线

WPF:ContentPresenter 上的 TextTrimming

Windows 讲述人读取窗口中所有控件的名称(甚至是隐藏的)

如何防止 WPF 剪切我的图像?