0

我正在尝试使用Image我的CanvasmyPrintingCanvas)之一。但是图像的宽度至少比画布宽两倍,并且创建的额外空间又回来了。如果我尝试另一个Canavas( LayoutRoot),它会按预期工作。

我的观察是,在myPrintingCanvasActualWidth 上始终为 0。LayoutRoot有一个正确的ActualWidth. 不确定它是否与额外的填充有关,并且我未能获得ActualWidthfor myPrintingCanvas(使用UpdateLayoutand Measure)。

代码:

//Code to render the content of myPrintingCanvas
...

//Make the WriteableBitmap 
WriteableBitmap myWriteableBitmap = new WriteableBitmap(myPrintingCanvas, null);
4

1 回答 1

0

您是否尝试过WriteableBitmap使用固定大小创建,然后调用其Render方法来呈现位图? Canvas有一些奇怪的行为,因为它是 Silverlight 和 WPF 中的反模式,并且违反了许多关于布局的规则。创建固定大小WriteableBitmap并对其进行渲染的代码如下所示:

        int width = 640;
        int height = 480;
        WriteableBitmap bmp = new WriteableBitmap(width, height);
        bmp.Render(myPrintingCanvas, null);
        bmp.Invalidate();

这种技术的一个优点是,如果您需要抓取多个图像,您可以重复使用相同的图像,WriteableBitmap而不是每次都重新创建它。

于 2011-11-16T15:43:21.797 回答