WPF DataGrid窗口调整大小不会调整DataGridColumns的大小
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF DataGrid窗口调整大小不会调整DataGridColumns的大小相关的知识,希望对你有一定的参考价值。
我有一个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派生一个子类来解决问题#3,并覆盖DataGrid的OnRenderSizeChanged
方法,如下所示。
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。我怎么能摆脱他们?
我和你有完全相同的问题,但我没有听RenderSizeChanged,而是听了SizeChanged事件,它解释了你所有的情况。
dataGrid.SizeChanged += (sender_, arg_) =>
{
foreach (var dataGridColumn in dataGrid.Columns)
{
DataGridLength dataGridLength = dataGridColumn.Width;
dataGridColumn.ClearValue(DataGridColumn.WidthProperty);
dataGridColumn.Width = dataGridLength;
}
};
我也遇到了你所说的同样的问题。我在互联网上搜索了一下,可能找到了解决方案。该解决方案实际上适合我。从C#代码中设置*值。这是代码片段,
dg.Coulmns [0] .Width = new DataGridLength(1.0,DatGridLengthUnitType.Star);
它会将第0列的宽度设置为*。不要忘记从XAML页面中删除Width =“1 **”。
享受大师。
以下覆盖修复了宽度增大的尺寸问题,包括最大化。但仍然没有恢复大小的问题。
protected override void OnChildDesiredSizeChanged(UIElement e)
{
base.OnChildDesiredSizeChanged(e);
if (e.FindChild<DataGrid>() != null)
{
foreach (var column in dataGridMain.Columns)
{
var tmp = column.GetValue(DataGridColumn.WidthProperty);
column.ClearValue(DataGridColumn.WidthProperty);
column.SetValue(DataGridColumn.WidthProperty, tmp);
}
}
}
PS这个问题只有在我为DataGrid定义GroupStyle模板时才出现,所以它看起来像一个bug。
所有DataGridTextColumn都将默认的MinWidth属性设置为20.因此,如果要在从max调整为min之后控制宽度,则必须自己指定此值。我的建议是:
<DataGridTextColumn Header="Perfect
column" Binding="{Binding SomeMember}" MinWidth="120" Width="120*"/>
以上是关于WPF DataGrid窗口调整大小不会调整DataGridColumns的大小的主要内容,如果未能解决你的问题,请参考以下文章