gpt4 book ai didi

c# - 出于屏幕阅读器的目的覆盖控件的名称

转载 作者:行者123 更新时间:2023-11-30 16:26:11 25 4
gpt4 key购买 nike

我有一个绑定(bind)到对象集合的 WPF DataGrid 控件。一切都按应有的方式呈现在屏幕上。

ToString() 由于应用程序其他地方的要求已被覆盖。

问题是,当通过屏幕阅读器(如 Microsoft 的内置讲述人)阅读时,或通过 AccChecker/Inspect 等工具检查时,控件的 name 是被覆盖的 ToString 值。

我希望能够为屏幕阅读器指定一个描述性名称,但找不到这样做的方法。我已经尝试设置 AutomationProperties.NameAutomationProperties.ItemType 等等,但是 AutomationProperties 中的所有属性似乎都没有所需的效果。

最理想的情况是,我能够对数据项本身以及列的各个成员执行此操作。

这是我遇到的问题的完整演示:

<DataGrid x:Name="dgTest" ItemsSource="{Binding}" AutoGenerateColumns="false" AutomationProperties.Name="Test">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Name" IsReadOnly="True" Width="2*" AutomationProperties.Name="Test2">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Name}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="ID" IsReadOnly="True" Width="2*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Id}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>

还有代码:

public class FooItem
{
public Guid Id { get; set; }
public string Name { get; set; }

public override string ToString()
{
return string.Concat(Id.ToString(), " : ", Name);
}
}

public partial class MainWindow : Window
{
public readonly List<FooItem> fooList = new List<FooItem>();
public MainWindow()
{
fooList.Add(new FooItem { Id = Guid.NewGuid(), Name = "Test 1" });
fooList.Add(new FooItem { Id = Guid.NewGuid(), Name = "Test 2" });
fooList.Add(new FooItem { Id = Guid.NewGuid(), Name = "Test 3" });

InitializeComponent();
dgTest.DataContext = fooList;
}
}

为了完整起见,这里是 Inspector 的屏幕截图。 full size image Inspector screenshot

最佳答案

我找到了解决方案...我必须在 DataGrid.ItemContainerStyleDataGridTemplateColumn.HeaderStyle 上使用样式来设置 AutomationProperties.Name .

例如:

<DataGrid x:Name="dgTest" ItemsSource="{Binding}" AutoGenerateColumns="false" AutomationProperties.Name="Test"> 
<DataGrid.ItemContainerStyle>
<Style>
<Setter Property="AutomationProperties.Name" Value="Row Item" />
</Style>
</DataGrid.ItemContainerStyle>
<DataGrid.Columns>
<DataGridTemplateColumn Header="Name" IsReadOnly="True" Width="2*" AutomationProperties.Name="Test2">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Name}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="ID" IsReadOnly="True" Width="2*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Id}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>

关于c# - 出于屏幕阅读器的目的覆盖控件的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9086158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com