KUMAR619 Ответов: 2

Как установить другой цвет для ячеек в WPF datagrid


Привет,
Я сталкиваюсь с проблемами при выборе конкретной ячейки, скажем, 5-й строки и 3-го столбца.
В WPF я использовал свойство с именем Columns для Datagrid, где я могу выбрать столбец для всех строк, но мне нужно получить любую случайную ячейку программно, чтобы установить Cellstyle.

Пожалуйста, посоветуйте мне избавиться от этой проблемы.

Что я уже пробовал:

Используется свойство столбца в элементе управления DataGrid

2 Ответов

Рейтинг:
0

AnkushK1

Вы пробовали использовать для этого ValueConverter? Используйте свойство зависимости для выполнения вычисления на основе предыдущего значения, и это должно вызвать привязку конвертера, где вы должны установить цвет. Для окраски ячеек с помощью конвертера обратитесь к приведенному ниже коду:

код XAML:

<Window.Resources>
    <local:NameToBrushConverter x:Key="CellConverter"/>
</Window.Resources>
...
<DataGridTextColumn Binding="{Binding PropertyName}">
    <DataGridTextColumn.ElementStyle>
        <Style TargetType="{x:Type TextBlock}">
            <Setter Property="Background" Value="{Binding PropertyName, Converter={StaticResource NameToBrushConverter}}"/>
        </Style>
    </DataGridTextColumn.ElementStyle>
</DataGridTextColumn>


Код:

public class CellConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        string input = value as string;
        switch (input)
        {
            case <your value condition>:
                return Brushes.Red;
            default:
                return DependencyProperty.UnsetValue;
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}


Рейтинг:
0

Gerry Schmitz

Используйте столбец DataGridTemplateColumn и привяжите цвет фона к выражению в вашем источнике данных IT. E. G.

DataGridTemplateColumn Width="*">
               <DataGridTemplateColumn.CellTemplate>
                  <DataTemplate>
                     <TextBlock Text="{Binding Path=Text}"
                                Background="{Binding Path=BackgroundColor}"
                                TextWrapping="Wrap"
                                Padding="4" />
                  </DataTemplate>
               </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>


public SolidColorBrush BackgroundColor { get { 
   if ( this.PartNumber == 3 ) { 
      return Brushes.MistyRose; 
   } 
   return Brushes.Transparent; 
} }