我正在使用来自WPF Toolkit release February 2010 (.net framework 3.5)的DataGrid控件,在为表格的单元格设置文本换行之后,我注意到DataGrid在最后一行之后显示了大量的可用空间。
可用空间量似乎与行数成正比(但情况并非总是如此)。
当我手动删除其中一行时,DataGrid会正确显示并删除可用空间。但是如果我在加载时删除代码中的一行,它就没有效果,仍然显示可用空间。我的猜测是这个技巧仅在DataGrid渲染后才有效。编辑单元格的内容不会触发调整大小。
注意:
我尝试为DataGrid设置MaxHeight但由于文本换行而无法正常工作。
我已经覆盖了DataGrid的Size MeasureOverride(Size availableSize)
方法,并注意到该方法被多次调用,并且首先大小是正确的,并且在增加一两次调用之后。 availableSize
也有无限高度。
知道如何修复DataGrid的高度吗?
修改
我创建了一个小型演示来展示我的问题。该项目需要引用WPFToolkit。
注意第一个和第二个DataGrid。
答案 0 :(得分:1)
似乎DataGridCellsPanel
计算DataGrid
的错误高度。
将DataGridCellsPanel
替换为StackPanel
,DataGrid
计算高度的正确值,不再浪费空间。
XAML中的解决方案:
<wpf:DataGrid ItemsSource="{Binding DataGridDS, ElementName=mainWindow}"
VirtualizingStackPanel.IsVirtualizing="False">
<wpf:DataGrid.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel />
</ItemsPanelTemplate>
</wpf:DataGrid.ItemsPanel>
<wpf:DataGrid.Columns>
<wpf:DataGridTextColumn Binding="{Binding Col1}" Width="*" />
<wpf:DataGridTextColumn Binding="{Binding Col2}" Width="100" />
<wpf:DataGridTextColumn Binding="{Binding Col3}" Width="100" />
</wpf:DataGrid.Columns>
</wpf:DataGrid>
后面的代码解决方案,我创建了一个从DataGrid扩展的自定义控件,并在构造函数中包含以下代码:
var stackPanelFactory = new FrameworkElementFactory(typeof(StackPanel));
var template = new ItemsPanelTemplate(stackPanelFactory);
this.ItemsPanel = template;
答案 1 :(得分:0)
您是否尝试过将VerticalContentAlignment和VerticalAlignment设置为Top?
我记得以前遇到过这个问题,但我不确定这是否是必需的修复。