0

我有一个视觉分页器。问题是,当我从代码创建视觉效果时,我必须调用 Measure 和 Arrange。但我想给他们无限的价值。

  stackpanel.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
  stackpanel.Arrange(new Rect(new Size(double.PositiveInfinity, double.PositiveInfinity)));

这引起

无法在具有无限大小或 NaN 的 UIElement 上调用 Arrange。“System.Windows.Controls.StackPanel”类型的父级调用 UIElement。安排调用类型为“System.Windows.Controls.StackPanel”的元素。

4

1 回答 1

3

在该Measure步骤中,父母询问其孩子在给定一定空间的情况下他们想要多少空间。这个空间也可以是无限的,这意味着问孩子“你想要多大的空间?没有限制。

在该Arrange步骤中,元素在布局上物理排列。父母告诉孩子他们被安排在哪里以及他们有多少空间。然而,Arrange 函数的 size 参数不能是无穷大,因为这是元素的实际大小。

您是否使用 Infinity 是因为您希望视觉效果占据打印页面上的所有可用空间?如果是的话,我通常做的是

Size sz = new Size(printCapabilities.PageImageableArea.ExtentWidth, 
             printCapabilities.PageImageableArea.ExtentHeight);
//update the layout of the visual to the printer page size.  
yourElement.Measure(sz);
yourElement.Arrange(new Rect(new Point(printCapabilities.PageImageableArea.OriginWidth, printCapabilities.PageImageableArea.OriginHeight), sz));
于 2012-11-30T07:39:20.160 回答