我有一个TextBlock,我想从屏幕阅读器跟踪该控件,并且只要在代码中为该控件设置了新值,屏幕阅读器就应该读出新文本。这可以从MSDN LINK中提到的.NET Framework 4.7.1的WPF中获得。
但是,我总是获得 AutomationPeer 值的 null 。我在代码中缺少什么?我做对了吗?请帮忙。
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);
}
最佳答案
使用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);
}