1

我正在使用2010 年 2 月发布的 WPF Toolkit(.net 框架 3.5)中的 DataGrid 控件,在为表格的单元格设置文本换行之后,我注意到 DataGrid 在最后一行之后显示有很多可用空间。

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

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

数据网格

笔记:

  1. 我尝试为 DataGrid 设置 MaxHeight,但由于文本换行,它不能很好地工作。

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

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

编辑:

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

主窗口.xaml

主窗口.xaml.cs

注意第一个和第二个 DataGrid。

4

2 回答 2

1

似乎DataGridCellsPanel计算了一个错误的高度DataGrid

通过将 替换为DataGridCellsPanelStackPanel计算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;
于 2013-04-02T08:27:16.287 回答
0

您是否尝试将 VerticalContentAlignment 和 VerticalAlignment 设置为顶部?

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

于 2013-03-27T15:10:17.447 回答