我有一個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;
}
}
和公正的完整性,這裏的督察截圖。 full size image
可以應用一個'DataGrid.RowStyle'其中'DataGridRow'的'Name'屬性綁定到一個值在'FooItem'類? – 2012-02-02 17:00:30