WPF直播区仅用于讲述人?

时间:2019-01-27 23:13:34

标签: c# wpf accessibility screen-readers

我有一个带有ContentTextBlock的文本块(AutomationProperties.LiveSettings="Assertive")。我只是测试并检查此功能的实用性。而且...到目前为止很失望。

private void Button_Click(object sender, RoutedEventArgs e)
{
   ContentTextBlock.Text += " test";
    var peer = UIElementAutomationPeer.FromElement(ContentTextBlock);
    if(peer == null)
    {
    peer = UIElementAutomationPeer.CreatePeerForElement(ContentTextBlock);
peer.RaiseAutomationEvent(AutomationEvents.LiveRegionChanged);
    }
peer.RaiseAutomationEvent(AutomationEvents.LiveRegionChanged);
}

使用“讲述人”时,此功能与广告中所宣传的一样。每当单击按钮时,讲述人都会宣布TextBlock文本(“测试”“测试测试”“测试测试测试”)...但是,当我使用NVDA或JAWS时,虽然屏幕阅读器版本是相对最新的,但没有任何反应。他们真的没有为直播区域添加任何支持吗?还是我只是想念一个重点?

1 个答案:

答案 0 :(得分:0)

虽然我没有设法让实时区域正常工作,但我发现了另一个解决方法:

Tolk by Davy Kager

Tolk是一个可以在其他人中使用的库

  • 检测支持的屏幕阅读器是否正在运行
  • 将字符串传递到屏幕阅读器的语音引擎和盲文。
  • 也支持SAPI

要在您的C#项目中包含Tolk,请从上面的链接下载Tolk,然后在项目中包含tolk.cs(来自src/dotnet),然后放置tolk.dll(在{{ 1}})包含在您的可执行文件所在的文件夹中(或PATH变量中的某个位置)。确保dll版本与您的CPU目标(x86 / x64)匹配。对lib目录中的dll执行相同的操作。然后,您可以根据示例文件夹中的代码使用它。

PS。 Tolk也可以在Win 7上工作,所以这是一个奖励。仅从Win 8开始才支持WPF的实时区域。