2012-01-26 13 views
6

Jestem w trakcie przekazywania ID automatyzacji do poszczególnych komórek w datagrid WPF, ale trafiłem trochę szkopuł. Postanowiłem spróbować nazwać komórki zgodnie z ich pozycją w siatce (indeks wiersza i indeks kolumny). Korzystanie inspektora UI i podkreślając jedną z DataGridCells mowa wykazuje następujące właściwości:XAML - Wiązanie indeksu wiersza i kolumny komórki do automatyzacji ID

GridItem.Row: 2 GridItem.Column: 0

... co pozwala mi wierzyć, że mogę uzyskać dostęp do tych właściwości poprzez wiązanie. Jednak spędziłem większą część ostatnich dni, przeczesując Internet, aby dowiedzieć się, jak to zrobić, ale niczego nie znalazłem.

Obecny kod XAML wygląda następująco (zwanego dalej „???” zostaną zastępcze):

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

Czy taka ścieżka do tych właściwości istnieje? Lub czy istnieje inna metoda przekazywania unikalnych identyfikatorów automatyzacji do poszczególnych komórek? Nie mam dużego doświadczenia z WPF i XAML, więc wszelkie wskazówki są mile widziane.

Z góry dziękuję.

+0

ja nie jestem pewien, ale spróbuj Eyjafjallajokull

+0

Próbowałem wstawić Twój fragment, ale niestety nie przyniósł on poprawnego wyniku (ID automatyzacji jest puste z jakiegokolwiek powodu). Dziękuję za reakcję - będę nadal grał z rzeczami i publikuję, gdy natknę się na coś. – CSD

Odpowiedz

6

Got go do pracy w końcu. Zamieszczam tutaj rozwiązanie, aby inni mogli skorzystać.

Kod tyłu (oparte off 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 

A XAML: Ścieżka

<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, mam sprawdzone go (nie DataGrid ale z siatki, powinna być taka sama), a to działa:

<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

Otrzymuję teraz "0-0" jako identyfikator automatyzacji dla wszystkich komórek w siatce. To duży krok naprzód w porównaniu z tym, co miałem wcześniej - dziękuję za pomoc! – CSD

+0

Przeglądano niektóre inne właściwości klas DataGrid i Grid ... Próbowano '' ale otrzymałem -1 dla wszystkich komórek. – CSD

+0

Czy możesz mi powiedzieć, gdzie są twoje właściwości "GridItem.Row" i "GridItem.Column"? Stworzyłem projekt testowy z datagridem, aby sprawdzić ten problem za pomocą Snoop, ale nie widzę tych właściwości. – Eyjafjallajokull

Powiązane problemy