我在后面的代码中创建了一个DataGrid
对象,并使用obj.ItemsSource
设置内容。
现在我想在后面的代码中设置一个特定行的背景颜色。我怎样才能做到这一点?
更新
我在后面的代码中创建了DataGrid
对象,如下所示:
var dataGrid = new DataGrid();
dataGrid.ItemsSource = BuildDataGrid(); // Has at least one row
var row = (DataGridRow) dataGrid.ItemContainerGenerator.ContainerFromIndex(0);
row.Background = Brushes.Red;
但row
对象为null
。那是为什么?
答案 0 :(得分:12)
您可以使用ItemContainerGenerator dataGrid获取DataGridRow
。
如果您想根据索引值选择行,请使用ContainerFromIndex()方法:
DataGridRow row = (DataGridRow)dataGrid.ItemContainerGenerator
.ContainerFromIndex(0);
如果想要根据项目获取行,请使用ContainerFromItem()方法:
DataGridRow row = (DataGridRow)dataGrid.ItemContainerGenerator
.ContainerFromItem(item);
最后在行上设置背景:
row.Background = Brushes.Red;
<强>更新强>:
在GUI上看不到dataGrid之前,不会生成容器。您需要等待容器生成,然后才能在DataGridRow上设置任何属性。
对于容器,我指的是DataGrid的DataGridRow。您需要像这样修改代码:
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;
}
};