2014-11-03 70 views
-1

我有一個從代碼生成的DataGrid使用星號大小的列自動調整數據網格的大小

DataGrid dataGrid = new DataGrid(); 
dataGrid.AutoGeneratedColumns = false; 
for (int i = 0; i < 3; i++) // Add some columns 
{ 
    DataGridBoundColumn column = new DataGridTextColumn(); 
    column.Width = new DataGridLength(1, DataGridLengthUnitType.Star); 
    column.Header = String.Format("Hello World {0}!", i); 
    dataGrid.Columns.Add(column); 
} 

return dataGrid; 

這導致的寬度Double.NaN,這是我想要的一個DataGrid,它具有3列,就像我想,但是,列不正確的大小。他們每個佔用儘可能小的空間,而不是填充DataGrid的整個空間。

當我手動設置DataGrid的寬度時,列的行爲應該像填充整個寬度一樣,並且每個列的寬度都相等。

下面是一張錯誤DataGrid的圖片。

Picture of DataGrid

回答

1

你可以嘗試推遲列的人口,直到數據網格的Loaded事件已經被解僱(然後解開事件處理程序)。然而,當數據網格被調整大小時,網格似乎並不會更新列寬。計算的寬度僅在列集合被修改,項目源發生更改或列可見性發生更改時似乎無效。

+0

+1:這是至少朝正確方向邁出的一步。我將每列的寬度更新爲'col.Width = new DataGridLength(1,DataGridLengthUnitType.Star);',但正如您所說的那樣,它們似乎不會隨着DataGrid的大小調整而更新。 – 2014-11-03 18:00:22

+0

您可以嘗試在更新之前使用'ClearValue'清除每列的寬度。如果你再次設置它,但寬度*已經* 1 *',那麼它不會被視爲一個改變。再次查看源代碼,似乎更改列寬應導致重新計算「實際」寬度。 – 2014-11-03 18:02:06

+0

實際上,在'Loaded'事件中,每列的寬度都是'Auto',我把早先的寬度設置器註釋掉了。 – 2014-11-03 18:05:44