3

我需要使我的应用程序视障友好......我正面临这个问题:Windows 讲述人会读取窗口中的所有控件名称,尽管其中一些控件名称是隐藏的。

我有另一个使用 WinForms 编写的应用程序,它运行良好。

在查看 UI Spy 后,我看到 WinForms 应用程序没有公开隐藏的控件,而 WPF 正在公开窗口中的所有控件。

可能是WPF中的错误吗?

4

2 回答 2

2

我遇到了同样的问题。根据亚历克西斯的回答,我写了下面的代码。这个对我有用。

public class MyAutoComplete : RadAutoCompleteBox
{
    public MyAutoComplete ()
    {
     //init stuff here   
    }


    protected override AutomationPeer OnCreateAutomationPeer()
    {
        return new MyAutomationPeer(this);
    }
}

internal class MyAutomationPeer : RadAutoCompleteBoxAutomationPeer
{
    public MyAutomationPeer(FrameworkElement owner)
        : base(owner)
    {

    }
    protected override List<AutomationPeer> GetChildrenCore()
    {
        return new List<AutomationPeer>();
    }
}
于 2014-10-30T21:44:29.827 回答
1

如果您的控件已经在可视化树中,则此行为是正常的,因为 UI 自动化树基于可视化树。因此,如果您想防止使用屏幕阅读器阅读不必要的元素,则必须按需加载它们。

您还可以覆盖包含可见和隐藏元素的控件中的OnCreateAutomationPeer方法,以返回您自己的 AutomationPeer。然后您可以覆盖GetChildrenCore方法并返回修改后的子集合。要更新自动化子树,需要调用AutomationPeer.ResetChildrenCache()方法和AutomationPeer.RaiseAutomationEvent(AutomationEvents.StructureChanged)之一。

于 2013-08-07T15:22:29.407 回答