首頁 >後端開發 >C++ >如何根據 WPF DataGrid 中的值有條件地變更單一儲存格的背景顏色?

如何根據 WPF DataGrid 中的值有條件地變更單一儲存格的背景顏色?

DDD
DDD原創
2025-01-23 09:11:12625瀏覽

How can I conditionally change the background color of individual cells in a WPF DataGrid based on their values?

根據儲存格值變更WPF DataGrid儲存格背景顏色

WPF DataGrid允許根據單元格值自訂單元格外觀。然而,直接套用樣式到DataGridCell會影響整行,而非單一儲存格。

解決方法是針對包含不同儲存格內容的特定欄位。例如,假設需要高亮顯示「Name」欄位中值為「John」的所有儲存格。

基於TextBlock的單元格

對於包含TextBlock的列,可以在列的ElementStyle中使用Trigger根據Text值更改Background屬性:

<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>

值轉換器方法

另一種方法是使用值轉換器將儲存格值轉換為畫刷:

<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中的用法:

<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綁定到傳回所需畫刷的屬性:

<code class="language-csharp">public string Name
{
    get { return _name; }
    set
    {
        if (_name != value)
        {
            _name = value;
            OnPropertyChanged(nameof(Name));
            OnPropertyChanged(nameof(NameBrush));
        }
    }
}

public Brush NameBrush
{
    get
    {
        switch (Name)
        {
            case "John":
                return Brushes.LightGreen;
            default:
                break;
        }

        return Brushes.Transparent;
    }
}</code>

在XAML中的綁定:

<code class="language-xml"><DataGridTextColumn Binding="{Binding Name}">
    <DataGridTextColumn.ElementStyle>
        <Setter Property="Background" Value="{Binding NameBrush}"/>
    </DataGridTextColumn.ElementStyle>
</DataGridTextColumn></code>

以上是如何根據 WPF DataGrid 中的值有條件地變更單一儲存格的背景顏色?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn