2016-05-27 13 views
1

Ich fand diese Lösung hier Change DataGrid cell colour based on values, aber ich möchte es auf eine andere Ebene, so dass ich verschiedene Bedingungen für die Änderung der Farbe für jede Zelle haben und annehmen kann Der einfachste Weg wäre, verschiedene Stile auf jede einzelne Zelle anzuwenden.Wie man einzigartige Stile auf einzelne Zellen in einem Datagrid in XAML ohne Codebehind anwendet

Kurz gesagt, was ist der XAML für den Zugriff auf eine einzelne Zelle in einem Datagrid?

UPDATE: Auf Vorschlag unten (@OmegaMan) fand diese: How can I use Grid.Row Property as a DataBinding Path for a MultiDataTrigger Condition?

<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=  (Grid.Row)}" Value="2"/> 

ist aber fest, wie man zu ändern, um es zu einem Datagrid Spalte und Zeile der Art wie unter

beziehen zu machen
<Style x:Key="colorDataGridCellStyle" TargetType="{x:Type DataGridCell}"> 
     <Setter Property="Background" Value="AntiqueWhite" /> 
     <Style.Triggers> 
      <MultiDataTrigger> 
       <MultiDataTrigger.Conditions> 
        <Condition Property ="Column" 
        Value="2"/> 
        <Condition Property ="Row" 
        Value="2"/> 
        <Condition {the value of this particular cell (2,2) is between two values, thinking this will mostly have to be in the viewModel but maybe can have more here} /> 
       </MultiDataTrigger.Conditions> 
       <Setter Property="Foreground" Value="Green" /> 
      </MultiDataTrigger> 
     </Style.Triggers> 
    </Style> 

UPDATE 2 ich fand gerade diese, die näher scheint, was ich brauche, aber ich bin nicht sicher, wie für die es zu ermöglichen, zu modifizieren spezi fic zu einzelnen Zellen.

How do I change a datagrid row color in XAML based on the value listed in code?

Antwort

0

einen Datatrigger auf einem Stil verwenden und auf Daten binden, die einen spezifischen Zellennamen ist „Johnson“, in diesem Fall Flagge jedermann, das identifizieren:

<Style x:Key="colorDataGridCellStyle" TargetType="{x:Type DataGridCell}"> 
    <Setter Property="Background" Value="AntiqueWhite" /> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding Path=Last}" Value="Johnson"> 
      <Setter Property="Foreground" Value="Blue" /> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

Für die Zielspalt festlegen, der Stil

<DataGridTextColumn Header="The Name" 
        Binding="{Binding Last}" 
        CellStyle="{StaticResource colorDataGridCellStyle}"/> 

das, wenn das Programm sehen sie in Aktion läuft:

+0

Wie genau "bin ich an Daten gebunden, die eine bestimmte Zelle identifizieren können"? Die einzige Bindung hier ist die IsPrimaryCell, die nur den DataTrigger auslöst, aber es würde es für die ganze Spalte nicht tun? – azulBonnet

+0

@azulBonnet Beispiel aktualisiert, um eine bestimmte Zelle (mit bestimmten Daten) anzuzeigen, die eine Farbänderung auslöst. Sie müssen eine solche Änderung für eine Zelle mit entweder einem einzelnen Trigger wie gezeigt oder mit Triggern mit mehreren Daten auslösen. Siehe [Antwort auf MultiData Trigger Beispiel] (http://stackoverflow.com/a/905940/285795) – OmegaMan

+0

Vielen Dank, aber ... Ich verstehe immer noch nicht, wie Sie den Stil auf eine einzelne Zelle anwenden. Innerhalb derselben Spalte/Zeile benötige ich verschiedene Trigger. Dies zeigt immer noch auf die gesamte Spalte. – azulBonnet