我正试图从Image
(Canvas
)之一中制作myPrintingCanvas
。但是图像的宽度至少比画布宽两倍,并且创建的额外空间又回来了。如果我尝试使用其他Canavas
(LayoutRoot
),则按预期工作。
我的观察是,在myPrintingCanvas
上,ActualWidth始终为0. LayoutRoot
具有正确的ActualWidth
。不确定它是否与额外的填充有关,但我未能获得ActualWidth
myPrintingCanvas
(使用UpdateLayout
和Measure
)。
代码:
//Code to render the content of myPrintingCanvas
...
//Make the WriteableBitmap
WriteableBitmap myWriteableBitmap = new WriteableBitmap(myPrintingCanvas, null);
答案 0 :(得分:0)
您是否尝试使用固定大小创建WriteableBitmap
,然后调用其Render
方法来呈现位图? Canvas
有一些奇怪的行为,因为它在Silverlight和WPF中is an anti-pattern并且打破了很多关于布局的规则。创建固定大小WriteableBitmap
并呈现给它的代码如下所示:
int width = 640;
int height = 480;
WriteableBitmap bmp = new WriteableBitmap(width, height);
bmp.Render(myPrintingCanvas, null);
bmp.Invalidate();
此技术的一个优点是,如果您需要抓取多个图像,则可以重复使用相同的WriteableBitmap
,而不是每次都重新创建它。