2012-01-31 53 views
3

我有一個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; 
    } 
} 

和公正的完整性,這裏的督察截圖。 full size image Inspector screenshot

+0

可以應用一個'DataGrid.RowStyle'其中'DataGridRow'的'Name'屬性綁定到一個值在'FooItem'類? – 2012-02-02 17:00:30

回答

3

我找到了解決辦法...我不得不使用樣式上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>