WPF DataGrid на пользовательской панели

#c# #wpf #mvvm #datagrid #panel

#c# #wpf #mvvm #сетка данных #панель

Вопрос:

Я создаю пользовательскую панель :

 public class TowColumnWrapPanel : Panel
{
  //Here have Dependency Properties: RowSpacing, ColumnSpacing, ColumnsCount

    protected override Size ArrangeOverride(Size arrangeSize)
    {
        List<int> shownChildIndexes = new List<int>();
        for (int i = 0; i < VisualChildrenCount; i  )
        {
            if (Children[i].Visibility == System.Windows.Visibility.Visible)
                shownChildIndexes.Add(i);
        }
        if (shownChildIndexes.Count == 1)
        {
           //on my example I use the code below:

            var child = Children[shownChildIndexes[0]];
            var r = new Rect(0, 0, arrangeSize.Width, arrangeSize.Height);
            if (child as FrameworkElement != null)
                (child as FrameworkElement).MaxWidth = arrangeSize.Width; 
            child.Arrange(r);
        }
        else
        {
           //Some functionality here for lot childs!! 
        }
        return base.ArrangeOverride(arrangeSize);
    }
}
 

Значение вышеупомянутого класса заключается в том, что все дочерние элементы будут иметь одинаковый размер и будут растянуты на один столбец / два столбца (необязательно для пользователя)

Все работает хорошо!

За исключением, конечно, DataGrid!!!!

Когда у меня есть DataGrid на моей пользовательской панели. Это выглядит так:

Перед изменением размера (все в порядке): введите описание изображения здесь

После изменения размера: (каким-то образом добавляет бесконечный столбец)

введите описание изображения здесь

Я не понимаю, почему это произошло, небольшая помощь помогла бы!

Комментарии:

1. Цель добавления кода заключается в том, чтобы мы могли протестировать его в новом проекте… это делается не только для того, чтобы вопрос выглядел красиво. Однако ваш код не демонстрирует вашу проблему, потому что вы опустили соответствующий материал.

2. Похоже, что последний столбец DataGrid имеет фиксированную ширину, Width=’*’ должен занимать все оставшееся пространство. И да, трудно понять, какое отношение ваш фрагмент кода имеет к проблеме.

Ответ №1:

Я пропустил эту функцию: MeasureOverride — можно увидеть по ссылке ниже:

http://www.codeproject.com/Articles/238307/A-Two-Column-Grid-for-WPF

Это то, что вызвало проблемы в DG.