2017-08-15 49 views
1

我想創造一種風格,使我的單元格的內容綠色若爲陽性,紅色如果爲負或黑色,如果0我如何樣式基於不點名是結合

我知道的轉換器和裝訂DataGridCell內容綁定,但有可能做到這一點,而無需命名特定列綁定到的字段(例如,我是基於任何單元格的值)?

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

因此,我可以在列上使用它,而無需重新迭代該樣式,以便我可以選擇我基於此的屬性。

回答

2

這裏是針對DataGridTextColumn s的解決方案。 DataGridTextColumn創建TextBlock元素以顯示單元格值。 TextBlock具有字符串Text屬性。這些的TextBlocks可以通過DataGridCell Content屬性來訪問,因此導致綁定路徑是 「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> 

{RelativeSource Self}

我還必須更改Convert方法,因爲Text是一個字符串屬性,並且傳入值是字符串。

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

謝謝,好主意! 我只需要恢復Path和RelativeSource。這可能是一個Visual Studio特定於版本的問題,但是,正如您的解決方案,它抱怨嵌套類型不受支持。 '' 奇效。只需編輯一下,我會接受你的回答;) –

+0

@BenoitDufresne,根據請求修復 – ASh