WPF Toolkit不正确的DataGrid高度

时间:2013-03-27 13:12:35

标签: c# wpf datagrid wpftoolkit

我正在使用来自WPF Toolkit release February 2010 (.net framework 3.5)的DataGrid控件,在为表格的单元格设置文本换行之后,我注意到DataGrid在最后一行之后显示了大量的可用空间。

可用空间量似乎与行数成正比(但情况并非总是如此)。

当我手动删除其中一行时,DataGrid会正确显示并删除可用空间。但是如果我在加载时删除代码中的一行,它就没有效果,仍然显示可用空间。我的猜测是这个技巧仅在DataGrid渲染后才有效。编辑单元格的内容不会触发调整大小。

Data Grid

注意:

  1. 我尝试为DataGrid设置MaxHeight但由于文本换行而无法正常工作。

  2. 我已经覆盖了DataGrid的Size MeasureOverride(Size availableSize)方法,并注意到该方法被多次调用,并且首先大小是正确的,并且在增加一两次调用之后。 availableSize也有无限高度。

  3. 知道如何修复DataGrid的高度吗?

    修改

    我创建了一个小型演示来展示我的问题。该项目需要引用WPFToolkit。

    MainWindow.xaml

    MainWindow.xaml.cs

    注意第一个和第二个DataGrid。

2 个答案:

答案 0 :(得分:1)

似乎DataGridCellsPanel计算DataGrid的错误高度。

DataGridCellsPanel替换为StackPanelDataGrid计算高度的正确值,不再浪费空间。

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?

我记得以前遇到过这个问题,但我不确定这是否是必需的修复。