如何在代码后面设置DataGrid行的背景颜色?

时间:2014-03-05 18:40:03

标签: c# wpf

我在后面的代码中创建了一个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。那是为什么?

1 个答案:

答案 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;
       }
    };