2016-08-02 97 views
0

我打开我的DataGrid,显示出在黑一些列数值的前景,同样的数据都写在红色等栏目,只是说不值确实存在在那里,尚未编辑。如果有人用红色改变数字,他们应该变成黑色。更改DataGrid细胞

我有写在XAML一个风格的DatagridCell -

<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(带有x:name列)的一个事件被称为 提前。

没有任何暗示?!好的,我会以更一般的方式提出问题。 让我说,我想每次更改其内容(不依赖于单元格中的值写入)时,以编程方式更改单元格的前景,那么执行此操作的正确方法是什么?

回答

0

你有没有使用DynamicResouce尝试,而不是静态资源

+0

号请给我一个提示,我该怎么办? THX –

+0

<形式的TargetType = “{x:类型DataGridCell}” 支持算法FMP = “{DynamicResouce D3ForegroundStyle}”/>

+0

编译器说,即使之前的XML编辑,“DynamicResource是不支持WPF项目“... –

0

首先,通过实施INotifyPropertyChanged申请变更通知到您D3StatusVal财产。如果你的目标类型设置为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> 

或者应用的样式为:

 <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检查Column.Header值(下文如使用Age列):

  <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