AutomationProperties.LiveSetting не работает в WPF в .NET Framework 4.7.1 - PullRequest
0 голосов
/ 08 октября 2018

У меня есть TextBlock, и я хочу отслеживать этот элемент управления из средства чтения с экрана, и всякий раз, когда в коде устанавливается новое значение для элемента управления, средство чтения с экрана должно считывать новый текст.Это доступно в WPF из .NET Framework 4.7.1, которое упоминается в MSDN LINK .

Но я всегда получаю ноль для значения AutomationPeer .Чего мне не хватает в коде?Я делаю это правильно?Пожалуйста, помогите.

XMAL

      <Window x:Class="WPFAccessibility.MainWindow"
                xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                xmlns:local="clr-namespace:WPFAccessibility"
                mc:Ignorable="d"
                Title="WPFAccessibility" Height="450" Width="800">
            <Grid>

                <TextBlock Name="MyTextBlock" AutomationProperties.LiveSetting="Assertive">My initial text</TextBlock>

                <Button Name="Save" Content="Save" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Margin="50,321,0,0" Height="49" Click="Save_Click"/>   

            </Grid>
        </Window>

Код

 private void Save_Click(object sender, RoutedEventArgs e)
        {
            // Setting the MyTextBlock text to some other value and screen 
            // reader should notify to the user
            MyTextBlock.Text = "My changed text";
            var peer = UIElementAutomationPeer.FromElement(MyTextBlock); 
           // I am always getting peer value null 
            peer.RaiseAutomationEvent(AutomationEvents.LiveRegionChanged);
        }

1 Ответ

0 голосов
/ 08 октября 2018

Используйте метод CreatePeerForElement для создания UIElementAutomationPeer для TextBlock:

private void Save_Click(object sender, RoutedEventArgs e)
{
    MyTextBlock.Text = "My changed text";
    var peer = UIElementAutomationPeer.FromElement(MyTextBlock);
    if (peer == null)
        peer = UIElementAutomationPeer.CreatePeerForElement(MyTextBlock);
    peer.RaiseAutomationEvent(AutomationEvents.LiveRegionChanged);
}
...