【发布时间】:2011-02-13 07:28:44
【问题描述】:
我的应用程序中有一个 WPF DataGrid(来自 WPFToolkit 包),如下所示。
<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*"。我在使用这种方法时遇到了两个问题。
- 当DataGrid 的
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。我怎样才能摆脱它们?
【问题讨论】:
标签: datagrid resize wpftoolkit