RowDetailsTemplate не изменяет размер автоматически - Silverlight DataGrid - PullRequest
1 голос
/ 10 марта 2010

Пожалуйста, посмотрите на приложенные скриншоты.

Я добавляю сетку данных в область подробностей строк для каждой строки в шаблоне.

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

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

Пожалуйста, обратитесь к следующему набору flickr, поскольку я не могу публиковать изображения или более одной гиперссылки: http://www.flickr.com/photos/47755109@N08/sets/72157623590404492/

Как мне исправить эту проблему?

С уважением Ренье

Ответы [ 2 ]

1 голос
/ 02 октября 2014

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

Но на самом деле ОЧЕНЬ легко решить эту проблему:

<sdk:DataGrid.RowDetailsTemplate>
    <DataTemplate>
         <ContentControl **VerticalAlignment="Top"**
...

-> если элемент управления внутри таблицы данных имеет вертикальное выравнивание «Верх» (по сравнению со стандартным значением «Растянуть»), строки сжимаются, как и ожидалось.

С уважением Johannes

0 голосов
/ 03 февраля 2012

Я знаю, что этот вопрос очень старый, но я наткнулся на него после того, как столкнулся с этой проблемой ранее. Это связано с другими проблемами, такими как http://forums.silverlight.net/p/96989/279885.aspx

По сути, корень заключается в том, что элемент управления DataGrid хочет избежать дрожания строк. Из-за виртуализации, когда вы выключаете элемент (допустим горизонтальную прокрутку), элемент больше не отображается. Поэтому, когда Silverlight пытается определить высоту строки, если самый большой фрагмент строки находится за пределами (и, следовательно, виртуализирован), тогда он не может точно знать, какой длины должна быть строка, без рендеринга всего содержимого вне экрана. Таким образом, в этом случае они пошли на компромисс, они используют высоту элементов на экране или текущую высоту строки, если текущая высота больше, чем у всех элементов, находящихся в данный момент на экране. Это приводит к описанному вами поведению.

Существует несколько обходных путей, один из которых описан в приведенной выше ссылке: отключить виртуализацию в DataGrid, но это может повлиять на производительность, если в DataGrid имеется нетривиальный объем данных. Другой, который я использовал, состоял в том, чтобы установить высоту строки DataGrid равной 0, вызвать повторную визуализацию и затем установить для высоты строки значение по умолчанию или автоматически. Таким образом, я смог заставить ряды сжаться.

Надеюсь, это поможет тому, кто сталкивается с этой проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...