如何修复Windows桌面应用DataGrid的无障碍焦点元素Name属性为空问题
修复DataGrid可焦点元素Name属性为空的无障碍问题
首次处理Windows无障碍相关问题时,使用Accessibility Insights for Windows工具检测桌面应用,发现DataGrid的自定义列及其他列中可焦点元素的Name属性为空。
问题代码
<controls:DataGrid x:Uid="DataTable" x:Name="detailGrid" Margin="0" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible" AreRowDetailsFrozen="False" AreRowGroupHeadersFrozen="True" AutoGenerateColumns="False" CanUserSortColumns="True" CanUserReorderColumns="True" CanUserResizeColumns="True" ColumnHeaderHeight="28" MaxColumnWidth="500" FrozenColumnCount="0" GridLinesVisibility="None" HeadersVisibility="Column" IsReadOnly="False" RowDetailsVisibilityMode="Collapsed" SelectionMode="Extended" SelectionChanged="OnDataGridSelectionChanged" RowHeight="25" RowGroupHeaderPropertyNameAlternative="Range" ItemsSource="{x:Bind ViewModel.GridData}" Visibility="{x:Bind ViewModel.IsContentVisible, Mode=OneWay, Converter={StaticResource BoolToVisibilityConverter}}"> <controls:DataGrid.Columns> <controls:DataGridTemplateColumn Header="Name"> <controls:DataGridTemplateColumn.CellTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <Image Margin="10,0,0,0" Width="15" Source="../Assets/folder.png" Visibility="{Binding ChildFolder.IsFolder, Converter={StaticResource BoolToVisibilityConverter}}" /> <Image Margin="10,0,0,0" Width="15" Source="../Assets/file.png" Visibility="{Binding ChildFolder.IsFolder, Converter={StaticResource BoolToInverseVisibilityConverter}}" /> <HyperlinkButton Height="28" FontFamily="Segoe" Content="{Binding ChildFolder.FolderName}" Margin="0" FontSize="12px" Tapped="onSingleTapped" DoubleTapped="onDoubleTapped" IsDoubleTapEnabled="True" CommandParameter="{Binding ChildFolder}" HorizontalAlignment="Stretch"> </HyperlinkButton> </StackPanel> </DataTemplate> </controls:DataGridTemplateColumn.CellTemplate> </controls:DataGridTemplateColumn> <!--<controls:DataGridTextColumn Binding="{Binding ChildFolder.BlobType}" Header="Blob Type" />--> <controls:DataGridTextColumn Binding="{Binding ChildFolder.LastModifiedLocal}" Header="Last Modified" /> <controls:DataGridTextColumn Binding="{Binding ChildFolder.ContentTypeDisplay}" Header="Content Type" /> <controls:DataGridTextColumn Binding="{Binding ChildFolder.ContentSize}" Header="Size" /> <controls:DataGridTextColumn Binding="{Binding ChildFolder.LeaseStateString}" Header="Lease State" /> </controls:DataGrid.Columns> </controls:DataGrid>
问题截图

已查阅微软官方关于UWP XAML自定义控件本地化控件类型、自定义控件名称的无障碍文档,但仍不清楚修复方法,现提供解决方案如下:
解决方案
1. 自定义模板列(DataGridTemplateColumn)修复
自定义列中的HyperlinkButton是可焦点元素,需为其设置AutomationProperties.Name,值需明确包含列标识与内容,让屏幕阅读器能清晰识别元素含义:
<HyperlinkButton Height="28" FontFamily="Segoe" Content="{Binding ChildFolder.FolderName}" Margin="0" FontSize="12px" Tapped="onSingleTapped" DoubleTapped="onDoubleTapped" IsDoubleTapEnabled="True" CommandParameter="{Binding ChildFolder}" HorizontalAlignment="Stretch" <!-- 添加无障碍名称绑定 --> AutomationProperties.Name="{Binding StringFormat='Name: {0}', Path=ChildFolder.FolderName}"> </HyperlinkButton>
同时,列中的图片属于非交互辅助元素,可设置IsTabStop="False"避免被焦点选中:
<Image Margin="10,0,0,0" Width="15" Source="../Assets/folder.png" Visibility="{Binding ChildFolder.IsFolder, Converter={StaticResource BoolToVisibilityConverter}}" IsTabStop="False" />
2. 文本列(DataGridTextColumn)修复
对于DataGridTextColumn,需通过CellStyle为单元格内的可焦点元素统一设置无障碍名称,绑定列头与单元格内容:
<controls:DataGridTextColumn Binding="{Binding ChildFolder.LastModifiedLocal}" Header="Last Modified"> <controls:DataGridTextColumn.CellStyle> <Style TargetType="controls:DataGridCell"> <Setter Property="AutomationProperties.Name" Value="{Binding StringFormat='Last Modified: {0}', Path=ChildFolder.LastModifiedLocal}" /> </Style> </controls:DataGridTextColumn.CellStyle> </controls:DataGridTextColumn>
其他文本列(如Content Type、Size等)可参照此方式修改,确保每个可焦点单元格都有明确的无障碍名称。
3. 通用修复要点
- 所有可交互/可焦点元素(如按钮、可编辑输入框)必须设置
AutomationProperties.Name,值应清晰描述元素的功能或内容。 - 非交互元素需设置
IsTabStop="False",避免干扰键盘导航与屏幕阅读器识别。 - 无障碍名称的命名需遵循用户认知习惯,优先采用「列名: 内容」的格式,帮助用户快速定位当前单元格的含义。
内容的提问来源于stack exchange,提问作者Apoorva Petkar
相关产品推荐
相关产品推荐

