XAML - 将单元格的行和列索引绑定到自动化ID

CSD*_*CSD 6 xaml

我正在为WPF数据网格中的单个单元格提供自动化ID,但我遇到了一些麻烦.我决定尝试根据它们在网格中的位置命名单元格(行索引和列索引).使用UI检查器并突出显示有问题的DataGridCell之一显示以下属性:

GridItem.Row: 2 GridItem.Column: 0

...这让我相信我可以通过绑定访问这些属性.但是,过去几天我花了大部分时间梳理互联网,以了解如何解决这个问题,但没有找到任何结果.

当前的XAML代码如下('???'是占位符):

<DataGrid.CellStyle>
  <Style TargetType="{x:Type DataGridCell}">
    <Setter Property="AutomationProperties.AutomationId">
      <Setter.Value>
        <MultiBinding StringFormat="cell:{0}-{1}">
          <Binding ??? />
          <Binding ??? />
        </MultiBinding>
      </Setter.Value>
    </Setter> 
  </Style>
</DataGrid.CellStyle>
Run Code Online (Sandbox Code Playgroud)

是否存在这些属性的路径?或者是否存在另一种方法来为单个单元格提供唯一的自动化ID?我对WPF和XAML不是很有经验,所以任何指针都很受欢迎.

提前致谢.

CSD*_*CSD 7

终于搞定了.在此发布解决方案,以便其他人可以受益.

背后的代码(基于http://gregandora.wordpress.com/2011/01/11/wpf-4-datagrid-getting-the-row-number-into-the-rowheader/):

Private Sub DataGrid_LoadingRow(sender As System.Object, e As System.Windows.Controls.DataGridRowEventArgs)
  e.Row.Tag = (e.Row.GetIndex()).ToString()
End Sub
Run Code Online (Sandbox Code Playgroud)

和XAML:

<DataGrid ... LoadingRow="DataGrid_LoadingRow" >

<DataGrid.ItemContainerStyle>
  <Style TargetType="{x:Type DataGridRow}">
    <Setter Property="AutomationProperties.AutomationId">
      <Setter.Value>
        <MultiBinding StringFormat="Row{0}">
          <Binding Path="(DataGridRow.Tag)"
                   RelativeSource="{RelativeSource Mode=Self}" />
        </MultiBinding>
      </Setter.Value>
    </Setter>
    <Setter Property="AutomationProperties.Name">
      <Setter.Value>
        <MultiBinding StringFormat="Row{0}">
          <Binding Path="(DataGridRow.Tag)"
                   RelativeSource="{RelativeSource Mode=Self}" />
        </MultiBinding>
      </Setter.Value>
    </Setter>
  </Style>
</DataGrid.ItemContainerStyle>

...

<DataGrid.CellStyle>
  <Style>
    <Setter Property="AutomationProperties.AutomationId">
      <Setter.Value>
        <MultiBinding StringFormat="cell{0}Col{1}">

          <!-- bind to row automation name (which contains row index) -->
          <Binding Path="(AutomationProperties.Name)"
                   RelativeSource="{RelativeSource AncestorType=DataGridRow}" />

          <!-- bind to column index -->
          <Binding Path="(DataGridCell.TabIndex)"
                   RelativeSource="{RelativeSource Mode=Self}" />

        </MultiBinding>
      </Setter.Value>
    </Setter> 
  </Style>
</DataGrid.CellStyle>

...

</DataGrid>
Run Code Online (Sandbox Code Playgroud)