我有一个WPF DataGrid(来自WPFToolkit包)像我的应用程序中的以下内容。WPF DataGrid窗口调整大小不会调整大小DataGridColumns
<Controls:DataGrid>
<Controls:DataGrid.Columns>
<Controls:DataGridTextColumn Width="1*" Binding="{Binding Path=Column1}" Header="Column 1" />
<Controls:DataGridTextColumn Width="1*" Binding="{Binding Path=Column2}" Header="Column 2" />
<Controls:DataGridTextColumn Width="1*" Binding="{Binding Path=Column3}" Header="Column 3" />
</Controls:DataGrid.Columns>
</Controls:DataGrid>
列的宽度应该被自动地调整,使得所有三列填充网格的宽度,所以在每列设置Width="1*"
。我用这种方法遇到了两个问题。
- 当数据网格的
ItemsSource
是null
或空列表,列不会大小以适合格栅的宽度,但具有大约20像素的一个固定的宽度。请看下面的图片:http://img169.imageshack.us/img169/3139/initialcolumnwidth.png
- 当我最大化应用程序窗口时,列不会调整它们的大小,但保持它们的初始大小。见下图:
http://img88.imageshack.us/img88/9362/columnwidthaftermaximiz.png
- 当我用鼠标调整应用程序窗口的大小时,列不会调整大小。
我能通过从DataGrid派生一个子类并覆盖DataGrid的OnRenderSizeChanged
方法来解决问题#3,如下所示。
protected override void OnRenderSizeChanged(SizeChangedInfo sizeInfo)
{
base.OnRenderSizeChanged(sizeInfo);
foreach (var column in Columns)
{
var tmp = column.GetValue(DataGridColumn.WidthProperty);
column.ClearValue(DataGridColumn.WidthProperty);
column.SetValue(DataGridColumn.WidthProperty, tmp);
}
}
不幸的是,这并没有解决问题#1和#2。我怎样才能摆脱它们?