我有一个页面,其中有两个需要打印的UIElement
s,一个是StackPanel
,另一个是用于显示考试成绩的自定义图形控件。根据要显示的测试数量,图形控件可以是任意长度,所以有时我可以在一个页面上同时显示两个控件,而其他时候则需要单独的页面。
将它们打印在单独的页面上工作得很好,因为我只是将UIElement设置为页面视觉,我遇到的问题是我无法弄清楚如何将它们组合在一起以在单个页面上打印。我试着在代码背后创建一个StackPanel并添加元素到它,但由于一个元素只能有一个父元素,我必须创建临时对象来保存每个,而我从原始父元素中删除,然后给新的StackPanel临时。问题是,在我这样做之后,所有的绑定数据都丢失了
任何想法都会很棒!谢谢。
您可以创建这些元素的快照并仅向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;
}
或者直接将图像放到Canvas
中,然后比较Canvas
的高度和图像高度来计算页面数