Имеется DataGridPeoples :
На котором возникает событие:
DataGridPeoples.Loaded += DataGridPeoples_Loaded;
Или
DataGridPeoples.LayoutUpdated
Следующего содержания:
private void DataGridPeoples_Loaded(object sender, EventArgs e)
{
foreach (People item in DataGridPeoples.ItemsSource)
{
var row = DataGridPeoples.ItemContainerGenerator.ContainerFromItem(item) as DataGridRow;
if (row != null && item.ExpirationDate.AddMonths(-1) <= DateTime.Now)
{
row.Background = Brushes.Crimson;
}
}
}
Проблема заключается в следующем, при прокрутке формы цвет фона строк применяется к тем строкам к которым не должен применяться, насколько я понял проблема связана с виртуализацией, если сделать на Datagrid:
EnableRowVirtualization="False"
То все работает правильно, но работает очень медленно такой вариант меня не устраивает. Как можно реализовать окраску фона строк и виртуализацию в одном виде?
Ответ
В общем проблема решена в англоязычной ветке по следующей ссылке:
https://stackoverflow.com/questions/17133286/rowvirtualization-cause-incorrect-background-color-for-rows. по умолчанию в Datagrid VirtualizationMode установлен как Recycling.
Для решения этой проблемы рекомендуется установить VirtualizationMode в Standard
И изменить события для раскраски фона на DataGrid.LoadingRow
Надеюсь кому-нибудь поможет.
Комментариев нет:
Отправить комментарий