C# 如何根据内容动态调整包装高度?

C# 如何根据内容动态调整包装高度?,c#,wpf,C#,Wpf,我正在开发一个WPF应用程序。在这个应用程序中,我有一个包含WrapPanel的窗口。包装内有一系列堆垛板,高度不同,但宽度相同。StackPanel的数量和大小在设计时未知(它们是动态生成的) 这些堆叠面板通常堆叠在彼此的顶部,然后在包装面板中没有更多空间时“包裹”到另一列。为了实现这一点,我必须为我的WrapPanel设置一个固定的高度(高度设置为“Auto”,它将继续沿着页面向下,而不是包装到另一列)。然而,如果碰巧我有一个StackPanel,它太大了,不适合包装箱的高度,它只是被截断了

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

这些堆叠面板通常堆叠在彼此的顶部,然后在包装面板中没有更多空间时“包裹”到另一列。为了实现这一点,我必须为我的WrapPanel设置一个固定的高度(高度设置为“Auto”,它将继续沿着页面向下,而不是包装到另一列)。然而,如果碰巧我有一个StackPanel,它太大了,不适合包装箱的高度,它只是被截断了。下面是这种情况的图像


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

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

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

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

编辑:刚刚意识到这只会在单个StackPanel占据整个高度时起作用,如图所示。但也许这会让你走上正轨

实际上,我不希望WrapPanel垂直增长,否则StackPanel不会跳到下一列。所以,包裹物的高度是固定的。你的代码很有趣,谢谢你的回复。我会试试的。那代码行得通,满足我的需要。有点棘手,因为在调用Show()之前,不会在Windows上设置Height属性……但是我让它工作了。谢谢