使用WPF DataGrid控制項時,通常需要根據單元格的資料值來自訂單元格的視覺外觀。雖然使用DataGrid.CellStyle似乎是一種簡單的方法,但它可能會無意中將樣式應用於整個行而不是單一單元格。讓我們探索實現單元格特定著色的替代方法。
要將樣式套用於列中的特定單元格,請考慮自訂每個DataGridTextColumn的ElementStyle屬性。例如,若要變更其中Name為「John」的儲存格的背景顏色,請使用下列程式碼:
<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>
對於更複雜的著色邏輯,您可以使用值轉換器。以下是將Name值對應到對應畫刷的範例:
<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>
使用方法:
<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>
或者,您可以直接將儲存格的Background屬性綁定到傳回所需畫刷的屬性。在這種方法中,請確保每當顏色依賴項變更時都會引發屬性變更通知。
以上是如何根據值變更 WPF DataGrid 儲存格顏色?的詳細內容。更多資訊請關注PHP中文網其他相關文章!