2010-03-01 145 views
1

我有一个包含另一个DataGrid的一些模板列的DataGrid。我的问题是,如果某些行中有很多内容,那么它们的高度不会调整,因此整个内容都可见,但它会被切断,从而给出行重叠的印象。但是,只要向网格添加新行或向主网格的某一行内的小型网格添加新行,布局就会更新,行高也会正确调整大小。WPF Toolkit DataGrid - 行重叠(行高问题)

所以问题是只有当第一次加载网格。

有没有办法强制网格大小的行高度的内容?

感谢

回答

0

我不知道这是什么,但你可以尝试打电话InvalidateVisual(),一段时间后,加载元素时。这迫使全新的布局传递...

0

我的UserControl中的DataGrid正在做同样的事情。在此示例中,仅有32行数据,其中包含五个DataGridTemplateColumns,其中包含<图像0​​和四个<TextBlock> s。

我的控件显示搜索结果,如果我重新运行相同的搜索,它并不总是这样做。另外,裁剪只会在第一页的结果上出现。向下行可以。

使用InvalidateVisual()没有帮助。

如果任何人对如何解决这个问题有任何想法,或者可以指出这是否是该控件的已知问题,那么我会有兴趣听到它。

1

今天我这个有些严重的问题(错误?),所以我会分享我试过,什么几乎工作......(并希望有人知道实际修复)

在我的情况下,只有10行或更多行才会出现错误。在行之外,十个第一行在某些情况下对于内容而言具有太小的高度。 (我首先想到这九个项目是互相叠加的,这对我来说是愚蠢的。)有很多列,所以有一个滚动条。单击滚动条将高度调整为适当的值。

有些事情,在我的经验不工作:

  • 更改虚拟化设置都没有效果。
  • InvalidateVisual()和InvalidateArrange()不起作用。尝试了两个数据网格及其父。
  • 更改数据网格的高度不起作用(虽然我对此处的测试并不满意)
  • 强制将单元格的数据类型设置为特定大小并没有效果。
  • 将数据网格放置在滚动查看器中(以便数据网格具有它可能需要的所有空间......)不起作用。

但是:

的一件事(我发现)的DataGrid似乎尊重是MinRowHeight设定,所以现在我有一个有值鲁钝,我希望这不会稍后在修改数据模板时会导致问题。

1

我遇到了与.NET Framework 4.0附带的DataGrid相同的错误。 在某些情况下(没有水平滚动条,窗口大于特定大小,...)行显示不正确,但放置在另一个顶部(具有小偏移量),因此最后一行完全可见。

首先,我试图在DataGrid中填充行之后自动执行UI行为,以便更新布局。但后来我发现,你可以使用调度程序重新呈现控件,在我的情况下,最终修复了这个bug。

我的整个代码的变化基本上是这样的(填充的DataGrid后右):

Action emptyAction = delegate() { }; 
myDataGrid.Dispatcher.Invoke(DispatcherPriority.Render, emptyAction); 
0

在我来说,我只需要在循环添加额外之前添加的第一行。

我想4列和ñ行是这样的:

private void InitToList() { 
     Grid wp = new Grid(); 
     wp.Margin = new Thickness(0); 
     wp.ColumnDefinitions.Add(new ColumnDefinition()); 
     wp.ColumnDefinitions.Add(new ColumnDefinition()); 
     wp.ColumnDefinitions.Add(new ColumnDefinition()); 
     wp.ColumnDefinitions.Add(new ColumnDefinition()); 
     wp.RowDefinitions.Add(new RowDefinition()); // adding this fixed the overlapping 

     int curCol = 0; 
     int curRow = 0; 
     foreach (string name in toIds) { 
      if (curCol >= wp.ColumnDefinitions.Count()) { 
       wp.RowDefinitions.Add(new RowDefinition()); 
       curCol = 0; 
       curRow++; 
      } 
      CheckBox cb = new CheckBox(); 
      cb.Name = String.Format("{0}Check", name.ToLower().Replace(" ", "")); 
      cb.IsChecked = false; 
      cb.Margin = new Thickness(5, 5, 5, 5); 
      cb.Content = name; 

      Grid.SetColumn(cb, curCol); 
      Grid.SetRow(cb, curRow); 
      wp.Children.Add(cb); 
      curCol++; 
     }