WPF Toolkit DataGrid - перекрытие строк (проблема с высотой строк) - PullRequest
1 голос
/ 01 марта 2010

У меня есть DataGrid с некоторыми столбцами шаблонов, которые содержат другой DataGrid. Моя проблема в том, что если в некоторых строках много контента, их высота не регулируется, поэтому весь контент виден, а скорее обрезается, создавая впечатление, что строки перекрываются. Однако, как только я добавляю новую строку в сетку или добавляю новую строку в мини-сетку внутри одной из строк основной сетки, компоновка обновляется, и высота строк корректно изменяется.

Так что проблема только при первой загрузке сетки.

Есть ли способ заставить сетку изменять высоту строк в соответствии с их содержанием?

Спасибо

Ответы [ 5 ]

1 голос
/ 28 августа 2012

Я столкнулся с той же ошибкой в ​​DataGrid, которая поставляется с .NET Framework 4.0. При определенных обстоятельствах (горизонтальная полоса прокрутки отсутствует, окно больше определенного размера, ...) строки отображались некорректно, а располагались поверх других (с небольшим смещением), поэтому полностью видна была только последняя строка.

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

Мое полное изменение кода в основном таково (сразу после заполнения DataGrid):

Action emptyAction = delegate() { };
myDataGrid.Dispatcher.Invoke(DispatcherPriority.Render, emptyAction);
1 голос
/ 13 августа 2010

У меня были некоторые серьезные проблемы с этим (ошибка?) Сегодня, поэтому я поделюсь тем, что я пробовал и что почти сработало ... (И надеюсь, что кто-то знает фактическое исправление)

В моем случае ошибка появлялась только при наличии 10 или более строк. Вне строк десять первых строк в некоторых случаях имели бы слишком малую высоту для содержимого. (Сначала я подумал, что девять элементов были нарисованы друг над другом, что было глупо с моей стороны.) Колонок довольно много, поэтому есть полоса прокрутки. Нажатие на полосу прокрутки изменяет размеры высоты до правильных значений.

Некоторые вещи, которые по моему опыту не работают:

  • Изменение настроек виртуализации не имело эффекта.
  • InvalidateVisual () и InvalidateArrange () не работают. Пробовал и датагрид и его родителя.
  • Изменение высоты сетки данных не сработало (хотя я не совсем доволен проведенными здесь тестами)
  • Принуждение таблиц данных ячеек к определенному размеру не дало эффекта.
  • Поместить сетку данных в средство просмотра прокрутки (чтобы у сетки данных было все пространство, которое когда-либо могло понадобиться ...) не сработало.

Тем не менее:

Единственное (я обнаружил), что сетка данных, похоже, уважает, это установка MinRowHeight, так что теперь у меня там дебильное значение, и я надеюсь, что это не вызовет проблем позже, когда изменятся шаблоны данных. .

0 голосов
/ 14 февраля 2015

В моем случае мне просто нужно было добавить первую строку перед циклом, добавляя дополнения.

Я хотел 4 столбца и n строк, например:

    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++;
        }
0 голосов
/ 03 апреля 2010

DataGrid в моем UserControl делает то же самое. В этом примере есть только 32 строки данных с пятью DataGridTemplateColumns, состоящими из и четырех s.

Мой элемент управления показывает результаты поиска, и если я перезапущу тот же поиск, он не всегда делает это. Кроме того, обрезка происходит примерно на первой странице результатов. Ряды внизу в порядке.

Использование InvalidateVisual () не помогает.

Если у кого-то есть идеи о том, как решить эту проблему, или можете указать, является ли это известной проблемой с этим элементом управления, мне было бы интересно узнать об этом.

0 голосов
/ 01 марта 2010

Я не уверен, что это такое, но вы можете попробовать вызвать InvalidateVisual () , через некоторое время, когда элемент загружен. Это заставляет завершить новый проход макета ...

...