2016-08-02 13 views
0

データグリッドを開き、一部の列で黒で数値を表示し、同じデータが他の列で赤で表示されます。実際に値が存在しないと言われ、編集されていません。誰かが赤で数字を変えると、黒になるはずです。DataGridセルのフォアグラウンドを変更する

私はDatagridCellの書き込みXAML内の1つのスタイルを持っている -

<Window.Resources> 
    <Style x:Key="D3ForegroundStyle" TargetType="{x:Type DataGridCell}" > 
     <Setter Property="Foreground" Value="Black" /> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding Path=D3StatusVal}" Value="inherited"> 
       <Setter Property="Foreground" Value="Red" /> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</Window.Resources> 

D3StatusValが、それは価値が「通常」または「継承」することができ、文字列です。 スタイルは、このように列にリンクされている:私が好きなように

   <DataGridTextColumn.CellStyle> 
        <Style TargetType="{x:Type DataGridCell}" BasedOn="{StaticResource D3ForegroundStyle}"/> 
       </DataGridTextColumn.CellStyle> 

初めて、私は窓を開けた直後、データグリッドは、それに応じてD3StatusValの値は、適切な方法でいくつかの値を埋めてきました他の赤色の黒色で表示されます。 D3StatusValの値が変更され、PropertyChangedの1つのイベント(x:列の名前)が呼び出されても、この後、セルのデータを変更しようとすると何も起こりません(セルの色を意味します) ありがとうあらかじめ。

ヒントはありませんか?さて、私はより一般的な方法で質問を提起するでしょう。 私は内容を変更するたびにセルの前景をプログラム的に変更したいのですが(セルに値を書き込むことに依存しない)、それを行う正しい方法は何ですか?

答えて

0

あなたがINotifyPropertyChangedを実装することで、あなたのD3StatusValプロパティに変更通知を適用し、DynamicResouce代わりのStaticResource

+0

号ヒントを欲しがるしてください、私はどのように行うことができますか? THX –

+0

<スタイルのTargetType = "{X:タイプDataGridCell}" BASEDON = "{DynamicResouce D3ForegroundStyle}" />

+0

XMLエディタ、コンパイラは、DynamicResourceがある」、と言う前であっても、 WPFプロジェクトでサポートされていません "... –

0

ファーストを使用しようとしています。あなたが明示的にDataGridCellにターゲットタイプを設定している場合

BasedOn文句を言わない仕事。 代わりに、あなたのスタイルを変更します。

<Style x:Key="D3ForegroundStyle"> 
    <Setter Property="DataGridCell.Foreground" Value="Black" /> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding Path=D3StatusVal}" Value="inherited"> 
      <Setter Property="DataGridCell.Foreground" Value="Red" /> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

またはASスタイルを適用します(Age列を使用しています例えば以下)Column.Header値をチェックするMultiDataTriggerを使用し、唯一の特定の列に色を変更するには

 <DataGrid.CellStyle> 
      <Style TargetType="DataGridCell"> 
       <Setter Property="Foreground" Value="Black" /> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding Path=D3StatusVal}" Value="inherited"> 
        <Setter Property="Foreground" Value="Red" /> 
       </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </DataGrid.CellStyle> 

  <MultiDataTrigger> 
       <MultiDataTrigger.Conditions> 
        <Condition Binding="{Binding Path=Age}" Value="12"/> 
        <Condition Binding="{Binding Column.Header, RelativeSource={RelativeSource Self}}" Value="Age"/> 
       </MultiDataTrigger.Conditions> 
       <MultiDataTrigger.Setters> 
        <Setter Property="DataGridCell.Foreground" Value="Yellow" /> 
       </MultiDataTrigger.Setters> 
      </MultiDataTrigger> 
+0

@ G.Zana私は両方の方法をチェックしました。 – AnjumSKhan

+0

@ G.Zana最新の回答を参照plz – AnjumSKhan

+0

@ G.Zana Plz答えの最後のセクションを参照してください。 – AnjumSKhan

関連する問題