【问题标题】:Printing multiple UIElements in Silverlight 4在 Silverlight 4 中打印多个 UIElement
【发布时间】:2011-08-17 18:29:43
【问题描述】:

我的页面有两个需要打印的UIElements,一个是StackPanel,另一个是用于显示考试成绩的自定义图形控件。根据要显示的测试数量,图形控件可以是任意长度,因此有时我可以将两者都放在一个页面上,而其他时候则需要单独的页面。

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

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

【问题讨论】:

    标签: xaml printing silverlight-4.0 uielement


    【解决方案1】:

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

    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;
    }
    

    【讨论】:

    • 在 WPF 中,更简单的方法是使用 VisualBrush。但不适用于 SL
    • 好的,所以我的下一个问题是,有没有办法只为 UIElement 的某个部分拍照?假设我要使用整个页面作为元素,计算我需要多少页,然后从顶部到-1024,然后从-1024 到-2048,以此类推,直到我有图片每一页。这可能吗?
    • @Josh - 您可以尝试使用 WriteableBitmap。可能是您可以将 UIElement 的特定部分呈现给它。很遗憾,我没有为您提供完整的解决方案。
    • 或者有没有办法在创建位图后将其拆分为多个部分?我可以拍摄整个页面的图像,然后以某种方式将其分成适合打印页面的图像。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多