C# 使用星形列自动调整数据网格的大小

C# 使用星形列自动调整数据网格的大小,c#,wpf,datagrid,C#,Wpf,Datagrid,我有一个由代码生成的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, Dat

我有一个由代码生成的
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;
DataGrid DataGrid=newdatagrid();
dataGrid.AutoGeneratedColumns=false;
对于(int i=0;i<3;i++)//添加一些列
{
DataGridBoundColumn=新DataGridTextColumn();
column.Width=新的DataGridLength(1,DataGridLengthUnitType.Star);
column.Header=String.Format(“helloworld{0}!”,i);
dataGrid.Columns.Add(column);
}
返回数据网格;
这将导致一个宽度为Double.NaN的
DataGrid
,这就是我想要的,它有3列,就像我想要的一样,但是,这些列的大小不正确。它们各自占用尽可能少的空间,而不是填满
数据网格的整个空间

当我手动设置
DataGrid
的宽度时,列的行为与它们应该的一样,填满整个宽度,并且每个列的大小彼此相等

下面是错误的
数据网格的图片


您可以尝试延迟列填充,直到数据网格的
加载的
事件被触发(然后取消事件处理程序的挂钩)。但是,网格似乎不会随着数据网格的大小而更新列宽。只有当列集合被修改、项源更改或列的可见性更改时,计算的宽度才会无效。

+1:这至少是正确的一步。我将每列的宽度更新为
col.width=newdatagridlength(1,datagridlengthunitype.Star),但正如您所说,它们似乎不会随着数据网格的大小而更新。您可以尝试在更新之前使用
ClearValue
清除每列的宽度。如果重新设置,但宽度已为
1*
,则不会将其视为更改。再次查看源代码,似乎更改列宽应该会导致重新计算“实际”宽度。实际上,在
Loaded
事件中,每个列的宽度都是
Auto
我注释掉了前面的宽度设置器。