2013-09-04 5 views
10

Ich habe habe folgendes DataGrid, wie eine Zelle Style Datagrid-Zelle bewerben

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

ich die folgende Zelle Stil der ausgewählte 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> 

ich die CellStyle="{StaticResource DataGridCell}" wie gezeigt Anwendung haben versucht, zu ändern oben und unter Verwendung von DynamicResource, aber die Ressource wird nicht aufgelöst. Ich habe das richtige Ressourcenwörterbuch importiert, da andere Stile funktionieren Was mache ich hier falsch?

Danke für Ihre Zeit.

+1

Unter der Annahme, dass Ihre Art in einem Ressourcenverzeichnis gehalten wird, würden Sie müssen keine x hinzuzufügen: Key-Attribut, um es zu lösen? – Andrew

Antwort

13

Da Ihr Style hat keine Key Sie müssen nicht gesetzt CellStyle auf dem DataGrid, es an alle DataGridCell standardmäßig angewendet werden.

Wenn Sie nicht wollen, galt es für alle DataGridCell standardmäßig geben dem Stil einen x:Key und stellen Sie die CellStyle auf der DataGrid

Beispiel:

<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

Noch einmal, Dummheit von mir. Ich arbeite nach der Arbeit an meinen eigenen Sachen und ich bin immer geknickt. Entschuldige, dass du deine Zeit hier verschwendest ... Eine Sache, die ich nicht verstehe, ist, dass sie standardmäßig nicht auf den CellStyle angewendet wurde. Irgendeine Idee dazu, warum habe ich ihr überhaupt keinen Schlüssel gegeben? Nochmals vielen Dank ... – MoonKnight

+0

Wenn Sie 'TargetType' ohne einen' Schlüssel' verwenden, wird dieser Stil automatisch auf alle Elemente dieses Typs angewendet, es sei denn, sie haben bereits einen Stil deklariert, der StaticResource/DynamicResource verwendet. Ich habe gerade DataGrid getestet Wenn ich 'CellStyle =" {StaticResource DataGridCell} "' aus deinem Code entferne, wird der Stil angewendet –

+0

Ich werde eine andere Frage basierend auf dieser Antwort stellen ... Ich wäre sehr dankbar, wenn du etwas mehr Weisheit liefern könntest. – MoonKnight

2

den Stil nur einige DataGridRow anwenden:

Erstellen Sie Ihren DataGridCell-Stil:

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

es in der Spalte Verwenden Sie

wollen
< !-- DataGrid --> 
<DataGrid > 
    <DataGrid.Columns> 
     <DataGridComboBoxColumn CellStyle="{StaticResource MyDataGridCellStyle}" /> 
     <DataGridTextColumn CellStyle="{StaticResource MyDataGridCellStyle}" /> 
    </DataGrid.Columns> 
</DataGrid>