2013-03-27 89 views
1

我使用从WPF Toolkit release February 2010 (.net framework 3.5) DataGrid控件和设置文本换行的表的单元格后,我已经注意到,DataGrid中显示与最后一行之后有很多的自由空间。WPF工具包不正确的DataGrid高度

的自由空间量似乎与行数比例(但并不总是如此)。

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

Data Grid

注:

  1. 我试图为DataGrid中的一个MaxHeight,但它不工作的文本换行的好,因为。

  2. 我已经覆盖了DataGrid的Size MeasureOverride(Size availableSize)方法,并且注意到该方法被多次调用,并且首先大小合适,并且在一次或多次调用之后它会增加。另外availableSize有无限高度。

任何想法如何可以修复DataGrid的高度?

编辑:

我创建了一个小的演示展示案例我的问题。该项目需要参考WPFToolkit。

MainWindow.xaml

MainWindow.xaml.cs

通告该第一和第二数据网格。

回答

1

看来,DataGridCellsPanel计算为DataGrid虚假的高度。

通过用StackPanel代替DataGridCellsPanelDataGrid计算高度的正确值并且不会浪费更多空间。

解决方案在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> 

解决方案背后的代码,我创建了从数据网格延伸的自定义控件,并在构造函数中的以下代码:

 var stackPanelFactory = new FrameworkElementFactory(typeof(StackPanel)); 
     var template = new ItemsPanelTemplate(stackPanelFactory); 
     this.ItemsPanel = template; 
0

您是否尝试过将VerticalContentAlignment和VerticalAlignment设置为Top?

我记得以前有这个问题,但我不能肯定,如果这是必要的修复。

+0

是的,我也试试吧,但它没有奏效。实际上,我将VerticalContentAlignment和VerticalAlignment设置为Top,将其设置为层次结构中的所有项目。 – 2013-03-27 15:13:33