2011-04-26 143 views
0

我正在开发一个WPF应用程序。在这个应用程序中,我有一个包含WrapPanel的窗口。 WrapPanel内部是一系列不同高度的StackPanels,但宽度完全相同。设计时不知道StackPanels的数量和大小(它们是动态生成的)。如何根据内容动态调整WrapPanel高度?

这些StackPanels通常彼此堆叠良好,然后在WrapPanel中没有更多空间时“换行”到另一列。为了达到这个目的,我必须为我的WrapPanel设置一个固定的高度(高度设置为“Auto”,它将继续向下而不是包装到另一个列)。然而,偶然我有一个StackPanel太大而不适合WrapPanel高度,它只是被截断。这种情况的图像如下。 (我没有代表嵌入图像)。

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

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

回答

1

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

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

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

编辑:刚刚意识到这一点,如果一个StackPanel中占据了整个高度,作为你的图像中才起作用。但也许它会让你走上正轨!

+0

我其实不希望WrapPanel垂直增长,否则StackPanels不会跳转到下一列。所以,WrapPanel的高度是固定的。你的代码很有趣,谢谢你的回复。我会尝试一下。 – robr 2011-04-26 19:21:46

+0

该代码有效,做我需要的。有点棘手,因为Height属性在Windows上没有设置,直到Show()被调用...但我得到它的工作。谢谢。 – robr 2011-04-26 20:58:43