如何根据内容动态调整WrapPanel高度?

时间:2011-04-26 17:22:15

标签: c# wpf

我正在开发一个WPF应用程序。在这个应用程序中,我有一个包含WrapPanel的Window。在WrapPanel内部是一系列StackPanels,它们具有不同的高度,但宽度相同。 StackPanels的数量和大小在设计时是未知的(它们是动态生成的)。

这些StackPanel通常在彼此之上堆叠得很好,然后在WrapPanel中没有更多空间时“换行”到另一列。为了实现这一点,我必须为我的WrapPanel设置一个固定的高度(高度设置为“Auto”,它将继续向下翻页而不是包装到另一列)。但是,如果偶然我有一个太大而无法容纳在WrapPanel高度的StackPanel,它就会被截断。这种情况的图像如下。 (我没有嵌入图像的代表)。

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

我的问题是,我可以在向用户显示()之前查询每个StackPanel的高度,并根据最大的StackPanel设置WrapPanel高度吗?有一个更好的方法吗?感谢。

1 个答案:

答案 0 :(得分:1)

首先,您是否确保此问题不是由WrapPanel达到其最大可用尺寸(即,其大小是否受其父窗口或元素约束)引起的?因为如果是这种情况,那么您需要查看重构整体布局,或将其包装在ScrollViewer中。

如果不是这种情况,并且WrapPanel有足够的空间来“增长”,这确实看起来像一个奇怪的问题。你说StackPanels是动态生成的。因此,在您的代码中,您必须调用myWrapPanel.Children.Add(stackPanel)。在这行代码之后,您可以尝试添加以下内容:

myWrapPanel.Height = myWrapPanel.Children.Cast<FrameworkElement>().Max(e => e.ActualHeight);
编辑:刚刚意识到这只有在单个StackPanel占据整个高度时才会起作用,就像你的图像一样。但也许它会让你走上正轨!