У меня есть элемент управления WPF DataGrid
, который привязывается к коллекции объектов. Все отображается на экране так, как должно быть.
ToString()
был переопределен из-за требований в другом месте приложения.
Проблема в том, что при чтении с помощью программы чтения с экрана (например, встроенного экранного диктора Microsoft) или при проверке с помощью такого инструмента, как 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. полноразмерное изображение
DataGrid.RowStyle
, который связывает свойствоName
DataGridRow
со значением в вашем классеFooItem
? - person Jake Berger   schedule 02.02.2012