仅适用于讲述人的 WPF 实时区域?

WPF Live-Regions just for Narrator?

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

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 文本 ("test" "test test" "test test test")...但是当我使用 NVDA 或 JAWS 时,没有任何反应,尽管屏幕阅读器版本相对最新-日期。他们真的没有添加任何对 live-regions 的支持,还是我只是漏掉了一个重点?

虽然我没能使实时区域正常工作,但我找到了另一个解决方法:

Tolk by Davy Kager

Tolk 是一个库,它可以与其他库一起使用

  • 检测支持的屏幕 reader,如果有的话,是 运行
  • 将字符串传递到屏幕 reader 的语音引擎和盲文。
  • 也支持 SAPI

要在您的 C# 项目中包含 Tolk,请从上面的 link 下载它,然后在您的项目中包含 tolk.cs(来自 src/dotnet),并将 tolk.dll (它在 bin 中找到)在您的可执行文件所在的文件夹中(或在 PATH 变量中的某处)。确保 dll 版本与您的 CPU 目标 (x86/x64) 匹配。对 lib 目录中的 dll 执行相同的操作。然后就可以根据examples文件夹中找到的代码使用了。

PS。 Tolk 也适用于 Win 7,所以这是一个额外的好处。 WPF 的实时区域仅从 Win 8 开始支持。