Как настроить высоту WrapPanel динамически в зависимости от содержимого? - PullRequest
0 голосов
/ 26 апреля 2011

Я разрабатываю приложение WPF. В этом приложении у меня есть окно, которое содержит WrapPanel. Внутри WrapPanel находится серия StackPanel, которые имеют различную высоту, но одинаковую ширину. Количество и размер StackPanels не известны во время разработки (они генерируются динамически).

Эти StackPanel обычно отлично накладываются друг на друга, а затем "переносятся" в другой столбец, когда в WrapPanel больше нет места. Чтобы достичь этого, я должен был установить фиксированную высоту для моей WrapPanel (с высотой, установленной в «Авто», она будет продолжаться вниз по странице вместо переноса в другой столбец). Однако, когда случайно у меня есть StackPanel, который слишком велик, чтобы поместиться в высоту WrapPanel, он просто усекается. Изображение этой ситуации ниже. (У меня нет представителя для встраивания изображений).

http://oi54.tinypic.com/2qa1ul3.jpg

Мой вопрос: могу ли я запросить высоту каждой StackPanel перед тем, как я покажу это пользователю, и установить высоту WrapPanel на основе самой большой StackPanel? Есть лучший способ сделать это? Спасибо.

1 Ответ

1 голос
/ 26 апреля 2011

Во-первых, гарантировали ли вы, что эта проблема не вызвана тем, что WrapPanel достигает максимально доступных размеров (т. Е. Если его размер ограничен его родительским окном или элементом)? Потому что, если это так, то вам нужно либо посмотреть на реструктуризацию вашего общего макета, либо обернуть его в ScrollViewer.

Если вышеизложенное не так, и у WrapPanel достаточно места для «роста», это действительно кажется странной проблемой. Вы говорите, что StackPanels генерируются динамически. Так что в вашем коде вы должны звонить myWrapPanel.Children.Add(stackPanel). После этой строки кода вы можете попробовать добавить что-то вроде следующего:

myWrapPanel.Height = myWrapPanel.Children.Cast<FrameworkElement>().Max(e => e.ActualHeight);

РЕДАКТИРОВАТЬ: только что понял, что это будет работать, только если одна StackPanel занимает всю высоту, как на вашем изображении. но, возможно, он выведет вас на правильный путь!

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