在Silverlight 4中打印多个UIElements

时间:2011-08-17 18:29:44

标签: xaml printing silverlight-4.0 uielement

我有一个页面需要打印两个UIElement,一个是StackPanel,另一个是用于显示测试分数的自定义图形控件。图形控件可以是基于要显示的测试数量的任何长度,因此有时我将能够在一个页面上适合两者并且其他时间将需要单独的页面。

在单独的页面上打印它们可以正常工作,因为我只是将UIElement设置为页面视觉,我遇到的问题是我无法弄清楚如何将它们组合在一起打印。我尝试在代码隐藏中创建一个StackPanel并向其中添加元素,但由于一个元素只能有一个父元素,所以我必须创建临时对象来保存每个元素,同时从原始父元素中删除,然后将temp赋予新的StackPanel 。问题是,在我这样做之后,所有绑定数据都会丢失

任何想法都会很棒!感谢。

2 个答案:

答案 0 :(得分:0)

您可以创建这些元素的快照,并仅将图像添加到StackPanel,而不是将实际元素添加到StackPanel进行打印。您可以使用以下方法从Image

创建UIElement
public static Image CreateElementImage(UIElement element) 
{
    var bitmap = new WriteableBitmap((int)element.RenderSize.Width, (int)element.RenderSize.Height);

    Array.Clear(bitmap.Pixels, 0, bitmap.Pixels.Length);
    bitmap.Render(element, element.RenderTransform);
    bitmap.Invalidate();

    var result = new Image {Source = bitmap};

    return result;
}

答案 1 :(得分:0)

或者只是将图片放在Canvas中,然后比较Canvas的高度和图像高度来计算页数。

相关问题