Как изменить цвет фона ячейки по условию? - PullRequest
0 голосов
/ 12 октября 2019

Как изменить цвет фона ячейки с помощью условия для числового значения?

Например, , когда цена больше 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>

1 Ответ

0 голосов
/ 12 октября 2019

Вы можете использовать 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();
    }
}

Теперь вы можете использовать этот конвертер, добавив его к Resources вашего DataGrid (или любого родительского элемента управления) и используя 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>

Это будет указывать вашему DataGridTextColumn применять Style ко всем его DataGridCell дочерним элементам, и это Style связывает свойство Background каждого DataGridCell со своим Price свойством через PriceToBackgroundColorConverter.

Вы можете изменить код преобразователя так, чтобы он выполнял любую логику, которую вы хотите, иметь несколько цветов для разных диапазонов и т. Д.

Вы также можете определить больше преобразователей и больше Setter для изменениядополнительные свойства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...