У меня есть элемент управления WPF DataGrid
, который привязан к коллекции объектов. Все отображается на экране, как и должно быть.
ToString()
было переопределено из-за требований в другом месте приложения.
Проблема заключается в том, что при чтении с помощью программы чтения с экрана (например, встроенного в Microsoft Narrator) или при проверке с помощью такого инструмента, как AccChecker / Inspect, name
элемента управления является переопределенным значением ToString
.
Я хочу указать описательное имя для программы чтения с экрана, но не могу найти способ сделать это. Я пытался установить AutomationProperties.Name
, AutomationProperties.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.
полноразмерное изображение