2014-11-03 56 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