【发布时间】:2014-04-11 02:08:52
【问题描述】:
我正在尝试在Silverlight 中以横向模式打印图像。
我找到了一个很好的例子here。大部分代码来自哪里。代码按预期完美运行。当我将 Line 更改为 Image 时,它失败了。
代码
Canvas OuterCanvas = new Canvas();
/* a container for everything that will print */
Border OuterBorder = new Border()
{
BorderThickness = new Thickness(3),
BorderBrush = new SolidColorBrush(Colors.Red),
Margin = new Thickness(10)
};
double Width = e.PrintableArea.Width - OuterBorder.Margin.Left - OuterBorder.Margin.Right;
double Height = e.PrintableArea.Height - OuterBorder.Margin.Top - OuterBorder.Margin.Bottom;
/* NOTE: We're trying to force landscape, so swop the width and height */
OuterBorder.Width = Height;
OuterBorder.Height = Width;
/* on portrait, this line goes down (leave the printer settings, we're trying to force landscape) */
Line Line = new Line()
{
X1 = OuterBorder.Width / 2,
Y1 = 0,
X2 = OuterBorder.Width / 2,
Y2 = OuterBorder.Height,
Stroke = new SolidColorBrush(Colors.Blue),
StrokeThickness = 3
};
//
// Here is where I changed the Line to an Image
//
OuterBorder.Child = imageElementInXaml; //Line;
OuterCanvas.Children.Add(OuterBorder);
/* rotate 90 degrees, and move into place */
var transformGroup = new TransformGroup();
transformGroup.Children.Add(new RotateTransform() { Angle = 90 });
transformGroup.Children.Add(new TranslateTransform() { X = e.PrintableArea.Width });
OuterBorder.RenderTransform = transformGroup;
e.PageVisual = OuterCanvas;
e.HasMorePages = false;
我知道 Border 只能包含 1 个元素,我已经这样做了,当我自己打印图像而不尝试使其成为横向时,这也有效。那么,当我简单地将Line 替换为图像Element 时,为什么它不起作用
【问题讨论】:
-
您是否在 XAML 中的图像有机会加载之前调用了此代码?
-
否,因为图像已加载,并且上面的代码在按钮单击事件处理程序中
-
您是否尝试过从头开始实例化和添加新图像,而不是使用 XAML 中的图像?
-
是的.. 我做到了,我已经从另一个我发现的源更新了我的代码,这似乎工作正常。
-
那么,为了将来这个问题的访问者参考,最终的解决方案是什么?顺便说一句,您可以将其发布为您自己问题的答案并将其标记为已回答,这是完全有效的。
标签: c# silverlight printing