C# 是否更改UWP文本框的屏幕阅读器行为?

C# 是否更改UWP文本框的屏幕阅读器行为?,c#,xaml,uwp,controls,C#,Xaml,Uwp,Controls,我已经编写了一个UserControl,它的工作原理类似于密码箱,但使用文本箱实现。该控件将字符替换为“点”字符,并用于不希望显示实际内容的情况。除了屏幕阅读器将读取输入的每个字符外,它的工作正常,这有违目的。相比之下,当用户在密码框中键入字符时,叙述者程序会说“隐藏”,而不是键入的密钥 当用户在文本框中键入键时,我能做些什么来改变屏幕阅读器的行为吗?如果我能让它说“隐藏”,那就太好了,但是让屏幕阅读器什么也不说也没关系。我查看了AutomationProperties类上的属性,但没有看到任何

我已经编写了一个UserControl,它的工作原理类似于密码箱,但使用文本箱实现。该控件将字符替换为“点”字符,并用于不希望显示实际内容的情况。除了屏幕阅读器将读取输入的每个字符外,它的工作正常,这有违目的。相比之下,当用户在密码框中键入字符时,叙述者程序会说“隐藏”,而不是键入的密钥


当用户在文本框中键入键时,我能做些什么来改变屏幕阅读器的行为吗?如果我能让它说“隐藏”,那就太好了,但是让屏幕阅读器什么也不说也没关系。我查看了AutomationProperties类上的属性,但没有看到任何明显的内容。

在编写Windows应用程序时,用于UI的类已经提供了UI自动化支持,它支持可访问性应用程序和辅助技术,如屏幕阅读器。PasswordBox的自动化是,您可以在PasswordBox AutomationPeer部分中检查默认对等实现和覆盖,它覆盖可以阻止屏幕阅读器读取字符的IsPassword方法

因此,您可以从TextBox派生自定义类,并为自定义类中启用的其他功能添加自动化支持。然后重写OnCreateAutomationPeer,使其返回您的自定义对等。例如:

public class MyCustomAutomationPeer : FrameworkElementAutomationPeer
{
    public MyCustomAutomationPeer(MyTextBox owner) : base(owner)
    {
    }

    protected override string GetClassNameCore()
    {
        return "MyTextBox";
    }

    protected override bool IsPasswordCore()
    {
        return true;
    }

    protected override AutomationControlType GetAutomationControlTypeCore()
    {
        return AutomationControlType.Edit;
    }
}


public class MyTextBox : TextBox
{
    public MyTextBox()
    {
        // other initialization; DefaultStyleKey etc.
    }

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

之后,您可以在MyTextBox中将键入的字符替换为“点”字符。此外,有关自定义自动化对等点的更多详细信息,您可以参考此信息。

谢谢Faywang-这正是我所需要的。