C# Silverlight:如何强制屏幕阅读器阅读?

C# Silverlight:如何强制屏幕阅读器阅读?,c#,silverlight,accessibility,ui-automation,screen-readers,C#,Silverlight,Accessibility,Ui Automation,Screen Readers,Silverlight在使自动化树易于访问方面做得很好,但是有没有一种方法可以通过编程要求屏幕阅读器阅读一些内容?到目前为止,我一直在使用: AutomationPeer peer = FrameworkElementAutomationPeer.FromElement(element); if (peer == null) { peer = FrameworkElementAutomationPeer.CreatePeer

Silverlight在使自动化树易于访问方面做得很好,但是有没有一种方法可以通过编程要求屏幕阅读器阅读一些内容?到目前为止,我一直在使用:

        AutomationPeer peer = FrameworkElementAutomationPeer.FromElement(element);
        if (peer == null)
        {
            peer = FrameworkElementAutomationPeer.CreatePeerForElement(element);
        }
        if (peer != null)
        {
            peer.RaiseAutomationEvent(AutomationEvents.AutomationFocusChanged);
        }
这在调试Silverlight运行时下可以正常工作(即如果我从VS内部启动ie),但如果我在Visual Studio外部启动ie(即使它指向同一个内部开发服务器…)则不起作用。那么,有没有另一种简单的方法让屏幕阅读器阅读一些东西呢


编辑:它在MS叙述者中也可以正常工作,但在NVDA中则不行。。。奇怪。

我认为你必须把焦点放在元素本身上。屏幕阅读器跟踪焦点,然后根据焦点读取值。如果您触发AutomationFocusChanged事件,则它可能会检测到该事件,但会返回到以前的控件。

元素是否在此时间点(就在它发送的事件之前)实际聚焦-即IsFocused属性返回true?一些屏幕阅读器会忽略那些来自那些看起来没有真正聚焦的元素的聚焦事件,并将它们视为“虚假”事件而不予理会。这里的情况可能是这样,也可能不是这样,但有一件事值得检查;这只是一种有时似乎有效的黑客手段。我希望能够强制屏幕阅读器阅读一些没有聚焦(而且永远不会聚焦)的内容。