2010-03-01 114 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++; 
     }