2012-03-13 7 views
0

stackoverflowに多くの助けを見つけた後、私はまだ答えが見つからない問題に苦しんでいます。私の目標は以下の通りです:Elementstyleのリファレンスリストの値

私は数字でいっぱいのwpf/c#アプリケーションでデータグリッドを持っています。数字が正か負かに依存して、フォアグラウンドフォントを緑または赤に変更したい。

  • 文字列の説明
  • 私は列を手動で設定しているtotalMoney

と呼ばれる12倍のリスト:DataGridのitemsourceは、次の要素が含まれて自分のクラスのリストです。最初に説明を表示してからtotalMoney [0]、totalMoney [1]などの値を設定します。いくつか検索した後、私は次のコードでdatatrigger方法プラスIValueConverterを経てここにStackOverflowの上の値に基づいて、個々のセルの前景色を変更する方法を見つけました:

<DataGridTextColumn.ElementStyle> 
    <Style TargetType="{x:Type TextBlock}"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding totalMoney[2], Converter={StaticResource money}}" Value="1"> 
       <Setter Property="Foreground" Value="Green"/> 
      </DataTrigger> 
      <DataTrigger Binding="{Binding totalMoney[2], Converter={StaticResource money}}" Value="0"> 
       <Setter Property="Foreground" Value="Black"/> 
      </DataTrigger> 
      <DataTrigger Binding="{Binding totalMoney[2], Converter={StaticResource money}}" Value="-1"> 
       <Setter Property="Foreground" Value="Red"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</DataGridTextColumn.ElementStyle> 

しかし、あなたがコードに見るようにWPFでは、リスト内の個々の項目(totalMoney [X])にバインディングを参照する必要があります。私は手動でデータグリッド内の各列のスタイルを設定する必要があります。私はいくつかのデータグリッドでスタイルを使用したいので、これは私にとっては非常に実用的ではないようです。

私の質問は、一般的にセルの値によってスタイルが変化するように定義することは可能ですか?それとも、私が見落とした目標を達成するために、まったく別の方法がありますか?

ありがとうございました。明日は、あなたがこれらのテキストと判断した場合には一見

答えて

0

、あなたはすべてのtotalMoney []の列に以下のスタイルを使用することができます...

<Style TargetType="{x:Type TextBlock}" x:Key="MoneyIndicatorStyle"> 
     <Style.Triggers> 
      <DataTrigger 
        Binding="{Binding Text, RelativeSource={RelativeSource Self}, 
            Converter={StaticResource money}}" 
        Value="1"> 
       <Setter Property="Foreground" Value="Green"/> 
      </DataTrigger> 
      <DataTrigger 
        Binding="{Binding Text, RelativeSource={RelativeSource Self}, 
            Converter={StaticResource money}}" 
        Value="0"> 
       <Setter Property="Foreground" Value="Black"/> 
      </DataTrigger> 
      <DataTrigger 
        Binding="{Binding Text, RelativeSource={RelativeSource Self}, 
            Converter={StaticResource money}}" 
        Value="-1"> 
       <Setter Property="Foreground" Value="Red"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 

しかし、ここでは... 潜在的なキャッチですtextblocksは次のような書式の通貨になります... $(1,00)すなわち会計の世界でマイナス100ドルの場合、コンバーターはこのフォーマットされた文字列をロケールに中立な数値、つまり-100.00に変換し、 0、1、-1のいずれかになります。

あなたのモデルから直接的な数値(totlaMoney [n])を受け取るので、あなたのコンバータは安心していますが、上記のスタイルを使用するとで表示されるTextに依存します!

だから決定はあなたのものです。

+0

お手数をおかけしていただきありがとうございました!それは私のお金のクラスでも "0,00€"のフォーマットで働くので、私の目的に完全に合っています。だから、ありがとう:) – Nemoi

関連する問題