运行时的 WPF 高度



我是WPF的新手。我试图解决的一个问题是如何在运行时获得正确的高度。

在我的应用程序中,我将用户控件动态添加到代码隐藏中的堆栈面板。用户控件包含一些 Texblocks。然后,我的堆栈面板将用作 BookPage 的内容,并将此 BookPage 添加到 Book(http://wpfbookcontrol.codeplex.com/) 中。堆栈面板的高度不应超过某个值。

我已经发现我可以使用测量和排列来计算用户控件的实际大小和高度:

itemsa.Measure(new System.Windows.Size(double.PositiveInfinity,     double.PositiveInfinity));
itemsa.Arrange(new Rect(0, 0, 400, itemsa.DesiredSize.Height));

此时,用户控件不会添加到堆栈面板中。 400 是我的用户控件不应超过的宽度,但它确实如此,因为文本块不会创建自动换行符。当我显示书籍时,将创建换行符。

我应该怎么做才能解决这个问题?

提前谢谢。

不确定是否要查找此内容,但使用 MaxHeight 属性,您可以限制控件的增长。

通常,没有必要覆盖度量和排列,布局系统非常强大,它为您提供了许多提供特定布局行为的容器控件。

为什么不对堆栈面板使用属性 MaxHeight?

此外,ActualWidth 和 ActualHeight 会告诉您控件的实际大小。

您确定需要所有这些计算吗?我的猜测是,最好使用自动调整大小的 GridRows 或类似的东西。

在我看来,您希望自定义面板以非常特定的方式进行布局。 可以从面板继承新类,然后重写 MeasureOverride 和 ArrangeOverride 以确定可以添加的内容和位置。 这也是您用于创建虚拟面板的方法,其中仅创建可见的子项,并在滚动时销毁它们。

如果您对此感兴趣,请告诉我,我将编辑帖子并提供示例。

最新更新