2017-08-15 2 views
1

Bindung ich einen Stil kreieren möchte, dass meine Zelle Inhalt grün, wenn positiv, rot, wenn negativ oder schwarz, wenn 0.Wie kann ich ohne Nennung auf der Bindung eines Datagridcell Inhalts Stil aus, dass

Ich weiß, über Konverter macht und Bindungen, aber ist es möglich, dies zu tun, ohne das Feld zu benennen, an das die spezifische Spalte gebunden ist (z. B. sollte ich auf dem basieren, was der Wert der Zelle ist)?

  <Style x:Key="GreenIfPositive" TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}"> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding, Converter={StaticResource greaterThanZeroDecimalConverter}}" Value="True"> 
         <Setter Property="Foreground" Value="Green"/> 
        </DataTrigger> 
        <DataTrigger BBinding="{Binding, Converter={StaticResource greaterThanZeroDecimalConverter}}" Value="False"> 
         <Setter Property="Foreground" Value="Red"/> 
        </DataTrigger> 
        <DataTrigger Binding="{Binding}" Value="0"> 
         <Setter Property="Foreground" Value="Black"/> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 

So, dass ich es auf Spalten ohne Re-Iteration diesen Stils verwenden könnte nur so kann ich die Eigenschaft wähle ich diese auf bin stützen.

Antwort

2

hier ist eine Lösung für DataGridTextColumn s. DataGridTextColumn erstellt ein TextBlock-Element, um den Zellenwert anzuzeigen. TextBlock hat die Eigenschaft Text. Diese Textblocks kann über Datagridcell Content Eigenschaft zugegriffen werden, so verbindlich Pfad ergibt, ist "Content.Text"

<Style.Triggers> 
    <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, 
       Path=Content.Text, Mode=OneWay, 
       Converter={StaticResource greaterThanZeroDecimalConverter}}" 
       Value="True"> 
     <Setter Property="Foreground" Value="Green"/> 
    </DataTrigger> 
    <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, 
       Path=Content.Text, Mode=OneWay, 
       Converter={StaticResource greaterThanZeroDecimalConverter}}" 
       Value="False"> 
     <Setter Property="Foreground" Value="Red"/> 
    </DataTrigger> 
    <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, 
       Path=Content.Text, Mode=OneWay}" 
       Value="0"> 
     <Setter Property="Foreground" Value="Black"/> 
    </DataTrigger> 
</Style.Triggers> 

note {RelativeSource Self}.

Ich musste auch Convert Methode ändern, weil Text eine String-Eigenschaft und ein eingehender Wert ist Zeichenfolge.

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
{ 
    double d; 
    if (value != null && value is string && double.TryParse(value.ToString(), out d)) 
    { 
     return d > 0; 
    } 
    return null; 
} 
+0

Danke, gute Idee! Ich musste nur Path und RelativeSource zurücksetzen. Dies könnte ein versionsspezifisches Problem in Visual Studio sein, aber Ihre Lösung hat sich darüber beschwert, dass verschachtelte Typen nicht unterstützt werden. '' Hat Wunder gewirkt. Bearbeiten Sie einfach das und ich werde Ihre Antwort akzeptieren;) –

+0

@BenoitDufresne, behoben pro Anfrage – ASh

Verwandte Themen