I create a DataGrid
object in my code behind and set the content with obj.ItemsSource
.
Now I would like to set the background color of one specific row in the code behind. How can I achieve this?
Update:
I create the DataGrid
object in the code behind like following:
var dataGrid = new DataGrid();
dataGrid.ItemsSource = BuildDataGrid(); // Has at least one row
var row = (DataGridRow) dataGrid.ItemContainerGenerator.ContainerFromIndex(0);
row.Background = Brushes.Red;
But the row
object is null
. Why is that?
You can get the DataGridRow
using ItemContainerGenerator of dataGrid.
In case you want to select row based on index value, use ContainerFromIndex() method:
DataGridRow row = (DataGridRow)dataGrid.ItemContainerGenerator
.ContainerFromIndex(0);
and in case want to get row based on item, use ContainerFromItem() method:
DataGridRow row = (DataGridRow)dataGrid.ItemContainerGenerator
.ContainerFromItem(item);
Finally set background on row:
row.Background = Brushes.Red;
UPDATE:
Containers are not generated till dataGrid is not visible on GUI. You need to wait for containers to be generated before you can set any property on DataGridRow.
By container i meant DataGridRow in case of DataGrid. You need to modify your code like this:
var dataGrid = new DataGrid();
dataGrid.ItemsSource = BuildDataGrid();
dataGrid.ItemContainerGenerator.StatusChanged += (s, e) =>
{
if (dataGrid.ItemContainerGenerator.Status ==
GeneratorStatus.ContainersGenerated)
{
var row = (DataGridRow)dataGrid.ItemContainerGenerator
.ContainerFromIndex(0);
row.Background = Brushes.Red;
}
};
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With