2016-08-02 95 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