2014-03-05 29 views
5

我在後面的代碼中創建DataGrid對象,並使用obj.ItemsSource設置內容。如何在後面的代碼中設置DataGrid行的背景顏色?

現在我想在後面的代碼中設置一個特定行的背景顏色。我怎樣才能做到這一點?

更新:

我在代碼中創建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

強烈建議在WPF中的程序代碼中創建UI元素。創建一個合適的ViewModel並使用適當的DataBinding。 –

回答

12

您可以使用dataGrid的ItemContainerGenerator獲取DataGridRow

如果您想根據索引值來選擇行,請使用ContainerFromIndex()方法:

DataGridRow row = (DataGridRow)dataGrid.ItemContainerGenerator 
        .ContainerFromIndex(0); 

,並在情況下,要根據項目獲得行,請使用ContainerFromItem()方法:

DataGridRow row = (DataGridRow)dataGrid.ItemContainerGenerator 
        .ContainerFromItem(item); 

最後設置背景:

row.Background = Brushes.Red; 

UPDATE

容器不至的數據網格生成不在GUI可見。您需要等待生成容器,然後才能在DataGridRow上設置任何屬性。

容器我的意思是DataGridRow在DataGrid的情況下。您需要像這樣修改代碼:

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; 
     } 
    }; 
+0

非常感謝。不幸的是,當我最終用row.Background = Brushes.Red設置行顏色時,我的程序崩潰。其他一切似乎都有效。你有什麼我可以錯過的線索嗎? –

+0

發佈崩潰異常消息。 –

+0

你正在排隊嗎?那不是空嗎? –