依數值變更WPF DataGrid儲存格顏色
在自訂WPF DataGrid時,您可能需要根據特定值套用不同的儲存格顏色。為此,您可以使用DataGrid列的XAML中的樣式或值轉換器。但是,當您遇到的樣式無意中影響了整行而不是目標單元格時會發生什麼?
問題分析
如果您遇到此問題,可能是因為您引用了DataGrid的CellStyle屬性,該屬性會套用於整行而不是單一儲存格。若要解決此問題,必須為DataGrid中的每個特定欄位指定CellStyle屬性。
將樣式套用於列
要自訂單一儲存格的外觀,請改為定位列的ElementStyle屬性。例如,如果您想要反白顯示所有具有特定值(例如「John」在「Name」欄位中)的儲存格,您可以使用下列XAML:
<code class="language-xml"><DataGridTextColumn Binding="{Binding Name}"> <DataGridTextColumn.ElementStyle> <Style TargetType="TextBlock"> <Style.Triggers> <Trigger Property="Text" Value="John"> <Setter Property="Background" Value="LightGreen" /> </Trigger> </Style.Triggers> </Style> </DataGridTextColumn.ElementStyle> </DataGridTextColumn></code>
使用此方法,顏色變更將僅套用於滿足指定條件的儲存格。
使用值轉換器
除了使用樣式外,您還可以利用值轉換器來修改儲存格顏色。值轉換器可讓您將綁定值轉換為不同的值,例如畫筆。請考慮以下C#範例:
<code class="language-csharp">public class NameToBrushConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { string input = (string)value; switch (input) { case "John": return Brushes.LightGreen; default: return DependencyProperty.UnsetValue; } } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotSupportedException(); } }</code>
要使用轉換器,請將其包含在XAML的Window.Resources部分中,並將單元格背景綁定到值轉換器,如下所示:
<code class="language-xml"><Window.Resources> <local:NameToBrushConverter x:Key="NameToBrushConverter" /> </Window.Resources> ... <DataGridTextColumn Binding="{Binding Name}"> <DataGridTextColumn.ElementStyle> <Setter Property="Background" Value="{Binding Name, Converter={StaticResource NameToBrushConverter}}" /> </DataGridTextColumn.ElementStyle> </DataGridTextColumn></code>
直接綁定到屬性
控制單元格背景顏色的另一種方法是直接綁定到資料模型中傳回所需畫筆的屬性。此方法要求您處理屬性變更通知,以確保在基礎資料變更時更新背景顏色。
以上是WPF DataGrid:如何根據值變更儲存格而不是行顏色?的詳細內容。更多資訊請關注PHP中文網其他相關文章!