2012-01-26 13 views
6

Estoy en el proceso de dar identificadores de automatización a celdas individuales dentro de una cuadrícula de datos WPF, pero me he topado con un pequeño inconveniente. Decidí intentar nombrar las celdas de acuerdo con su posición en la grilla (índice de fila e índice de columna). El uso de un inspector de la interfaz de usuario y poner de relieve uno de los DataGridCells en cuestión muestra las siguientes propiedades:XAML - Índice de fila y columna de unión de la celda a la ID de automatización

GridItem.Row: 2 GridItem.Column: 0

... lo que me lleva a creer que puedo acceder a estas propiedades mediante la unión. Sin embargo, he pasado la mayor parte de los últimos días buscando en Internet cómo hacerlo, pero no he encontrado nada.

El código XAML actual es la siguiente (los marcadores de posición '' son ???):

<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> 

¿Existe un camino así a estas propiedades? ¿O existe otro método para proporcionar ID de automatización únicos a células individuales? No tengo mucha experiencia con WPF y XAML, así que cualquier puntero es apreciado.

Gracias de antemano.

+0

yo no estoy seguro, pero intento Eyjafjallajokull

+0

Intenté insertar su fragmento, pero no produjo el resultado correcto, lamentablemente (el archivo de automatización está en blanco por el motivo que sea). Gracias por responder. Seguiré jugando con las cosas y publicando si me tropiezo con algo. – CSD

Respuesta

6

tengo que trabajar por último. Publicar una solución aquí para que otros puedan beneficiarse.

El código subyacente (basa fuera 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 

Y el 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> 
1

Ok, lo he comprobado (no con la cuadrícula de datos pero con rejilla, que debe ser igual), y funciona:

<AutomationProperties.AutomationId> 
    <MultiBinding StringFormat="{}{0} - {1}"> 
      <Binding Path="(Grid.Row)" RelativeSource="{RelativeSource Mode=Self}" /> 
      <Binding Path="(Grid.Column)" RelativeSource="{RelativeSource Mode=Self}" /> 
     </MultiBinding> 
</AutomationProperties.AutomationId> 
+0

Ahora obtengo "0-0" como el ID de automatización para todas las celdas de la grilla. Sin embargo, ese es un gran paso adelante en comparación con lo que tenía antes. ¡Gracias por su ayuda! – CSD

+0

Revisé otras propiedades de las clases DataGrid y Grid ... Intenté '' pero recibí -1 para todas las celdas. – CSD

+0

¿Puede decirme por favor dónde están sus propiedades "GridItem.Row" y "GridItem.Column"? Creé un proyecto de prueba con DataGrid para inspeccionar este problema con Snoop, pero no veo estas propiedades. – Eyjafjallajokull

Cuestiones relacionadas