XAML 如何根据条件更改单元格的背景色?

epfja78i  于 2023-08-01  发布在  其他
关注(0)|答案(1)|浏览(148)

如何通过条件或数值更改单元格的背景色?

例如,当价格大于10时,背景颜色为红色。

我这样做了,但值保持不变,我希望这适用于所有大于100的值,例如。

<DataGridTextColumn Binding="{Binding Price}"
        Header="Price">
        <DataGridTextColumn.ElementStyle>
            <Style TargetType="{x:Type TextBlock}">
                <Style.Triggers>
                    <Trigger Property="Text" Value="100">
                        <Setter Property="Foreground" Value="Red"/>
                        <Setter Property="FontWeight" Value="Bold"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </DataGridTextColumn.ElementStyle>
    </DataGridTextColumn>

字符串

mqkwyuun

mqkwyuun1#

您可以使用IValueConverter将价格转换为颜色,并定义DataGridTextColumn.CellStyle以使用此转换器。

在你的代码中定义这个:

public class PriceToBackgroundColorConverter : IValueConverter {
    // Converts a value into a color.
    // Returns Red if value is greater than 100, else White.
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
        int price = (int)value;
        if (price > 100) {
            return Brushes.Red;
        } else {
            return Brushes.White;
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
        throw new NotImplementedException();
    }
}

字符串
现在,您可以使用此转换器,方法是将其添加到DataGrid(或任何父控件)的Resources中,并使用Setter来样式化所有DataGridCell对象。

<DataGrid ItemsSource="{Binding Items}">
        <DataGrid.Resources>
            <wpfapp1:PriceToBackgroundColorConverter x:Key="PriceToBackgroundColorConverter"></wpfapp1:PriceToBackgroundColorConverter>
        </DataGrid.Resources>
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Price}" Header="Price">
                <DataGridTextColumn.CellStyle>
                    <Style TargetType="DataGridCell">
                        <Setter Property="Background" Value="{Binding Path=Price, Converter={StaticResource PriceToBackgroundColorConverter}}"></Setter>
                    </Style>
                </DataGridTextColumn.CellStyle>
            </DataGridTextColumn>
        </DataGrid.Columns>
    </DataGrid>


这将指示您的DataGridTextColumnStyle应用于它的所有DataGridCell子节点,并且这个Style通过PriceToBackgroundColorConverter将每个DataGridCellBackground属性绑定到它的Price属性。
您可以更改转换器代码以执行任何类型的逻辑,为不同的范围提供多种颜色等。
您还可以定义更多转换器和更多Setter来更改其他属性。

相关问题