Как мы добавляем цвет для ячейки программно в сетке данных WPF? Я могу добавить цвет к строке мудрый, но я хочу добавить цвет в ячейку из кода позади. Пожалуйста, укажите код для этого?Раскраска ячеек WPF Datagrid
0
A
ответ
1
Что делает этот код: сначала вы обрабатываете событие LoadingRow
, получаете строку (она имеет свойство Item, которое содержит связанный элемент), получает связанный элемент, выполняет все необходимые вычисления, получает ячейку, в которой вы нуждаетесь, изменить и, наконец, изменить стиль целевой ячейки.
Вот код (в качестве пункта я использую объект выборки с ИНТ ID
свойством, что я использую для окраски) .:
C#:
private void FillTheDataGrid()
{
List<SomeClass> list = new List<SomeClass>();
Random rnd = new Random();
for (int i = 0; i < 10; i++)
{
list.Add(new SomeClass() { DaysOld = DateTime.Now.Add(new TimeSpan(rnd.Next(5), 0, 0, 0)), ID=i});
}
dataGrid.ItemsSource = list;
}
private void dataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
{
Dispatcher.BeginInvoke(DispatcherPriority.Render, new Action(() => AlterRow(e)));
}
private void AlterRow(DataGridRowEventArgs e)
{
var cell = GetCell(dataGrid, e.Row, 1);
if (cell == null) return;
var item = e.Row.Item as SomeClass;
if (item == null) return;
var value = item.ID;
if (value <= 1) cell.Background = Brushes.Red;
else if (value <= 2) cell.Background = Brushes.Yellow;
else cell.Background = Brushes.Green;
}
public static DataGridRow GetRow(DataGrid grid, int index)
{
var row = grid.ItemContainerGenerator.ContainerFromIndex(index) as DataGridRow;
if (row == null)
{
// may be virtualized, bring into view and try again
grid.ScrollIntoView(grid.Items[index]);
row = (DataGridRow)grid.ItemContainerGenerator.ContainerFromIndex(index);
}
return row;
}
public static T GetVisualChild<T>(Visual parent) where T : Visual
{
T child = default(T);
int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < numVisuals; i++)
{
var v = (Visual)VisualTreeHelper.GetChild(parent, i);
child = v as T ?? GetVisualChild<T>(v);
if (child != null)
{
break;
}
}
return child;
}
public static DataGridCell GetCell(DataGrid host, DataGridRow row, int columnIndex)
{
if (row == null) return null;
var presenter = GetVisualChild<DataGridCellsPresenter>(row);
if (presenter == null) return null;
// try to get the cell but it may possibly be virtualized
var cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(columnIndex);
if (cell == null)
{
// now try to bring into view and retreive the cell
host.ScrollIntoView(row, host.Columns[columnIndex]);
cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(columnIndex);
}
return cell;
}
Модель:
public class SomeClass
{
public int ID { get; set; }
public DateTime DaysOld { get; set; }
}
XAML:
<DataGrid Name="dataGrid" AutoGenerateColumns="True" LoadingRow="dataGrid_LoadingRow"/>
0
В зависимости от того, что там в вашем DataGridCell вы можете создать DataTemplate, который связывается с цветом или использовать триггер
<DataTemplate DataType="{x:Type cell:MyCellObject}">
<TextBlock TextAlignment="Center" Text="{Binding Text}">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Background" Value="{Binding MyBackground}" />
<Setter Property="Foreground" Value="Black" />
<Setter Property="Padding" Value="0" />
<Style.Triggers>
<DataTrigger Binding="{Binding MyBool}" Value="True">
<Setter Property="Foreground" Value="DarkRed" />
<Setter Property="FontWeight" Value="Bold" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</DataTemplate>
Смежные вопросы
- 1. WPF DataGrid Coloring - пользовательская раскраска для обоих строк и ячеек
- 2. Раскраска ячеек
- 3. Слияние ячеек в WPF DataGrid
- 4. Раскраска ячеек в Shiny Rendertable
- 5. Конкретная раскраска строк на DataGrid
- 6. WPF Чтение ячеек из DataGrid со списком
- 7. Объединение ячеек в WPF DataGrid по вертикали
- 8. WPF - Динамическая раскраска заголовка TreeViewItem
- 9. C# WPF DataGrid: как цвет текста краски внутри ячеек DataGrid без нарушения DataGrid iteslf?
- 10. WPF DataGrid RowDataBound?
- 11. wpf Datagrid: Combobox Интеграция в wpf datagrid
- 12. Слияние выбранных ячеек DataGrid
- 13. Структура WPF DataGrid - изменение ячеек в зависимости от значения
- 14. Как скрыть границу ячеек в wpf tooltit datagrid?
- 15. Ширина вертикальных ячеек по размеру в элементе управления WPF Datagrid
- 16. Ошибка виртуализации Wpf Datagrid при настройке цветов ячеек
- 17. Очистка ячеек wpf datagrid пользователем во время выполнения
- 18. WPF DataGrid - Различные цвета ячеек на основе скрытого значения
- 19. C# WPF DataGrid Изменить цвет ячеек по значению
- 20. Как установить событие для всех ячеек в WPF Datagrid
- 21. WPF, префикс ячейки datagrid
- 22. WPF DataGrid style-Silverlight DataGrid?
- 23. WPF: Ошибка отображения DataGrid
- 24. WPF Datagrid Cross row Validation
- 25. Раскраска ListView Rectangle в ViewBox WPF
- 26. Получение направления выбора DataGrid WPF
- 27. WPF DataGrid отображает несколько типов
- 28. WPF Datagrid Performance
- 29. WPF Datagrid читает значение ячейки
- 30. Создание ячеек Silverlight Datagrid недоступно
@RintoAntony Если мой ответ поможет вам, можно пометить его как ответ для упрощения поиска других людей. – StepUp