2013-03-27 4 views
1

Я использую элемент управления DataGrid от WPF Toolkit release February 2010 (.net framework 3.5) и после установки переноса текста для ячеек таблицы я заметил, что DataGrid отображается с большим количеством свободного места после последней строки.WPF Toolkit некорректный Высота DataGrid

Объем свободного пространства пропорционален количеству строк (но это не всегда так).

Когда я вручную удаляю одну из строк, DataGrid отображается правильно и свободное место удаляется. Но если я удаляю строку в коде за время загрузки, это не имеет никакого эффекта, и свободное место все еще отображается. Я предполагаю, что трюк работает только после того, как DataGrid был визуализирован. Редактирование содержимого ячейки не вызывает изменение размера.

Data Grid

Примечания:

  1. Я попытался установить MaxHeight для DataGrid, но он не работает хорошо, из-за переноса текста.

  2. Я перезаписал метод DataGrid Size MeasureOverride(Size availableSize) и заметил, что метод вызывается несколько раз и что сначала размер правильный, и после одного или двух вызовов он увеличивается. Также availableSize имеет бесконечную высоту.

Любая идея, как я могу исправить высоту DataGrid?

EDIT:

Я создал небольшую демонстрацию, чтобы показать случай мою проблему. Для проекта требуется ссылка на WPFToolkit.

MainWindow.xaml

MainWindow.xaml.cs

Обратите внимание на первый и второй DataGrid.

ответ

1

Кажется, что DataGridCellsPanel вычисляет ложную высоту для DataGrid.

Заменив DataGridCellsPanel на StackPanel, 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; 
0

Вы пытались установить VerticalContentAlignment и VerticalAlignment на Top?

Я помню эту проблему раньше, но я не совсем уверен, было ли это исправление.

+0

Да, я попробовать , но это не сработало.Я на самом деле пошел и установил VerticalContentAlignment и VerticalAlignment в Top для всех элементов в иерархии. –

Смежные вопросы