我是WPF的新手。我试图解决的一个问题是如何在运行时获得正确的高度。
在我的应用程序中,我动态地将Usercontrols添加到代码中的Stackpanel。 Usercontrol包含一些Texblock。然后,我的Stackpanel将用作BookPage的内容,此BookPage将添加到Book(http://wpfbookcontrol.codeplex.com/)。我的Stackpanel的高度不应超过一定值。
我已经发现我可以使用Measure&安排计算ActualSize& Usercontrol的高度:
itemsa.Measure(new System.Windows.Size(double.PositiveInfinity, double.PositiveInfinity));
itemsa.Arrange(new Rect(0, 0, 400, itemsa.DesiredSize.Height));
此时Usercontrol未添加到Stackpanel。 400是我的用户控件不应超过的宽度,但确实如此,因为Textblock不会创建自动换行符。当我显示Book时,会创建换行符。
我该怎么做才能解决这个问题?
提前致谢。
答案 0 :(得分:0)
不确定您是否正在寻找此项,但使用MaxHeight属性可以限制控件的增长。
一般情况下,没有必要覆盖测量和排列,布局系统非常强大,它为您提供了许多提供特定布局行为的container-controls。
答案 1 :(得分:0)
为什么不将属性MaxHeight用于stackpanel?
ActualWidth和ActualHeight也会告诉你控件的实际大小。
您确定需要所有这些计算吗?我的猜测是使用自动调整大小的GridRows或类似的东西会更好。
答案 2 :(得分:0)
听起来我想要一个自定义面板以非常具体的方式进行布局。您可以从Panel继承一个新类,然后覆盖MeasureOverride和ArrangeOverride以确定可以添加的内容和位置。这也是您用来创建虚拟面板的方法,其中只创建了可见子项,并在滚动时销毁它们。
如果您对此感兴趣,请告诉我,我将编辑帖子并提供示例。