You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF中如何让屏幕阅读器播报新开的未获得焦点窗口

适配未聚焦窗口自动播报的WPF原生实现方案

以下实现完全基于微软官方原生API,无需引入任何第三方类库,可适配你的业务限制要求:

  • 首先确认你的项目最低目标框架为.NET Framework 4.7.1及以上版本,这是微软官方原生支持AutomationProperties实时区域特性的最低版本要求
  • 在你要弹出的未聚焦窗口的XAML根节点上,配置两个自动化属性:
    <Window x:Class="YourNamespace.DataProtectTipWindow"
            ......
            AutomationProperties.LiveSetting="Assertive"
            AutomationProperties.Name="你需要播报的完整数据保护提示内容">
    
    其中Assertive级别会让屏幕阅读器优先处理这条通知,不需要等待用户当前交互停止,刚好适配未聚焦窗口的主动播报场景;AutomationProperties.Name的内容就是你要让阅读器播报的文本,也可以在后台代码中动态赋值修改
  • 窗口弹出逻辑处添加主动触发UIA属性变更的代码,无需强制窗口获取焦点:
    var protectTipWindow = new DataProtectTipWindow();
    protectTipWindow.Show();
    // 无需调用Focus(),不会抢占原有窗口焦点
    // 主动触发自动化属性变更通知,让系统捕获到实时区域更新
    var automationPeer = UIElementAutomationPeer.FromElement(protectTipWindow);
    automationPeer?.RaisePropertyChangedEvent(AutomationElementIdentifiers.LiveRegionProperty, null, protectTipWindow.GetValue(AutomationProperties.LiveSettingProperty));
    
  • 如果需要播报的是窗口内的动态内容而非整段提示,可将AutomationProperties.LiveSetting属性配置到窗口内部对应的TextBlock等显示元素上,触发对应元素的属性变更通知即可

该实现完全遵循微软UIA自动化标准,所有支持UIA协议的Windows 10屏幕阅读器都可兼容,无需修改阅读器端的任何配置。

内容的提问来源于stack exchange,提问作者Chrᴉz remembers Monica

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 22:12:02