Подтвердить что ты не робот

WPAT datagrids и динамические ширины столбцов

У нас есть настраиваемый элемент управления DataGrid, который динамически генерирует столбцы, определенные структурой XML.

При создании каждого из столбцов мы даем ему звездный тип единицы, потому что мы хотим гарантировать, что никогда не будет горизонтальной прокрутки в DataGrid.

            DataGridTextColumn column = new DataGridTextColumn();
            column.Width = new DataGridLength(entity.DisplaySize, DataGridLengthUnitType.Star);

Однако мы заметили, что когда DataGrid визуализируется, он отображает с минимальным размером, заданным столбцами, а затем, когда DataGrid полностью отображается, он изменяет размер столбцов, чтобы правильно вписываться в DataGrid. Это вызывает эффект мерцания.

Есть ли у кого-нибудь возможные решения? Может быть, как сделать DataGrid в фоновом режиме, а затем показать, когда столбцы сделаны fidgeting? Или любые другие идеи?

4b9b3361

Ответ 1

Это, к сожалению, нормальное поведение. Это связано с тем, как осуществляется управление. В WPF у вас есть слои на уровнях элементов управления, и DataGrid не имеет способа узнать, какие элементы управления пока не завершили рендеринг.

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

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

Здесь один из xceed: http://xceed.com/Grid_WPF_Intro.html?gclid=CNKE8rOBtrICFQfonAodHQ8AEA

Здесь один из Telerik: http://www.telerik.com/products/wpf/gridview.aspx

(Из-за необходимости балансировать гибкость с производительностью и большое количество функций, ожидаемых в современном datagrid, этот контроль уже давно считается вершиной развития управления. Хорошие датаарифы чрезвычайно сложны в построении. В Excel, Microsoft построила целое приложение вокруг, по сути, прославленного datagrid. Все это говорит о том, что вы, вероятно, не найдете то, что ищете, бесплатно.)

Смотрите этот вопрос: WPF DataGrid Vs Windows Forms DataGridView

Ответ 2

Я не думаю, что вы собираетесь сделать в фоновом режиме. Как это делает макет, есть два прохода.

Макетная система

Меня поражает это нажатием кнопки, где кнопка - ListItem. Кнопка приводит к изменению некоторого содержимого выше, и он изменяет положение кнопки таким образом, что есть еще одна кнопка в том же месте. Событие клика обрабатывается неправильно. Когда я пытаюсь сломать код до чего-то простого для публикации на SO, он работает.

В DataGrid, с которым я работаю, это ListView GridView и вычисляет ширину каждого столбца.