2013-09-04 10 views
10

Mam następujący DataGridJak zastosować styl komórki do DataGrid komórki

<DataGrid x:Name="cultureDataGrid" 
      Grid.Row="1" 
      CellStyle="{StaticResource DataGridCell}" 
      ItemsSource="{Binding Cultures, 
           NotifyOnSourceUpdated=True, 
           UpdateSourceTrigger=PropertyChanged, 
           Mode=TwoWay, 
           IsAsync=True}" 
      Style="{x:Null}" > 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="Code" Binding="{Binding Code}" IsReadOnly="True"/> 
     <DataGridTextColumn Header="Language" Binding="{Binding Language}" IsReadOnly="True"/> 
     <DataGridTextColumn Header="LocalName" Binding="{Binding LocalName}" IsReadOnly="True"/> 
    </DataGrid.Columns> 
</DataGrid> 

Mam następujący styl komórki, aby zmienić wybrany Backcolor

<Style TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}"> 
    <Setter Property="Background" Value="White"/> 
    <Setter Property="VerticalContentAlignment" Value="Center"/> 
    <Style.Triggers> 
     <Trigger Property="IsSelected" Value="True"> 
      <Setter Property="Background" Value="Red"/> 
      <Setter Property="Foreground" Value="White"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

Próbowałem nałożeniem CellStyle="{StaticResource DataGridCell}" jak pokazano powyżej i przy użyciu DynamicResource, ale zasób nie zostanie rozwiązany. Zaimportowałem poprawny słownik zasobów, ponieważ działają inne style. Co ja tu robię źle?

Dzięki za poświęcony czas.

+1

Zakładając, że Twój styl jest utrzymywany w słowniku zasobów, czy nie trzeba dodać atrybut x: Key, aby go rozwiązać? – Andrew

Odpowiedz

13

Od swojej Style nie ma Key nie trzeba ustawić na DataGridCellStyle, zostanie on zastosowany do wszystkich DataGridCell domyślnie.

Jeśli nie chcesz go zastosować do wszystkich DataGridCell domyślnie dać styl jest x:Key i ustawić CellStyle na DataGrid

Przykład:

<Style x:Key="MyDataGridCell" TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}"> 
    <Setter Property="Background" Value="White"/> 
    <Setter Property="VerticalContentAlignment" Value="Center"/> 
    <Style.Triggers> 
     <Trigger Property="IsSelected" Value="True"> 
      <Setter Property="Background" Value="Red"/> 
      <Setter Property="Foreground" Value="White"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

<DataGrid CellStyle="{StaticResource MyDataGridCell}" /> 
+0

Znowu, całkowita głupota przeze mnie. Pracuję po pracy nad własnymi rzeczami i zawsze jestem podniszczony. Przepraszam, że tracę tu swój czas ... Jedną z rzeczy, których nie rozumiem, jest to, że domyślnie nie była ona stosowana w CellStyle. Jakikolwiek pomysł na to, dlatego nie dałem mu klucza w pierwszej kolejności? Jeszcze raz dziękuję ... – MoonKnight

+0

Jeśli użyjesz 'TargetType' bez' Key', styl będzie automatycznie stosowany do wszystkich elementów tego typu, chyba że mają styl zadeklarowany już przy użyciu StaticResource/DynamicResource, właśnie przetestowałem DataGrid i to samo Jeśli usuniemy 'CellStyle =" {StaticResource DataGridCell} "' z Twojego kodu, styl został zastosowany –

+0

Mam zamiar zadać inne pytanie w oparciu o tę odpowiedź ... Byłbym bardzo wdzięczny, gdybyś mógł zapewnić trochę więcej mądrości. – MoonKnight

2

Aby zastosować styl tylko do pewnego DataGridRow:

Utwórz styl DataGridCell:

< !-- DataGridCell Style--> 
< Style x:Key="MyDataGridCellStyle" TargetType="{x:Type DataGridCell}"> 
    <Setter Property="Background" Value="White"/> 
    <Setter Property="VerticalContentAlignment" Value="Center"/> 
    <Style.Triggers> 
     <Trigger Property="IsSelected" Value="True"> 
      <Setter Property="Background" Value="Red"/> 
      <Setter Property="Foreground" Value="White"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

Użyj go w kolumnie chcesz

< !-- DataGrid --> 
<DataGrid > 
    <DataGrid.Columns> 
     <DataGridComboBoxColumn CellStyle="{StaticResource MyDataGridCellStyle}" /> 
     <DataGridTextColumn CellStyle="{StaticResource MyDataGridCellStyle}" /> 
    </DataGrid.Columns> 
</DataGrid> 
Powiązane problemy