我必须打印一个显示的TreeView。
将根TreeViewItem呈现为位图,为我提供了整个(甚至是不可见节点)树的图像。然后我在“页面”中拆分位图进行打印。渲染代码:
m_Bitmap = new RenderTargetBitmap((int)l_RootTreeViewItem.ActualHeightDesiredSize.Width,
(int)l_RootTreeViewItem.ActualHeight, 96, 96,
PixelFormats.Pbgra32);
m_Bitmap.Render(l_RootTreeViewItem);
适用于小型树木。如果树很大, RenderTargetBitmap 会导致“Out of Memory”异常。
因此,我们的想法是只渲染部分视觉内容以避免内存问题。一个渲染方法,我可以选择要渲染的视觉部分将是完美的......
m_Bitmap.Render(l_RootTreeViewItem, xOffset, yOffset, width, height);
......但不存在。有没有办法做到这一点?
答案 0 :(得分:1)
我会做什么:
VisualBrush
l_RootTreeViewItem
Rectangle
并将可视画笔分配给Fill
属性VisualBrush.Viewbox
和VisualBrush.Viewport
来渲染我感兴趣的树视图部分RenderTargetBitmap.Render
修改强>
解决方案2
l_RootTreeViewItem
放入画布ClipToBounds
属性设置为true Canvas.Width
,Canvas.Height
属性和Canvas.Left
,Canvas.Top
附加属性进行游戏,仅显示TreeViewItem
根据需要在画布上使用PrintDialog.PrintVisual
。
<Canvas Width="300" Height="300" ClipToBounds="True">
<TreeViewItem Canvas.Left="-200" Canvas.Top="-100">
...
</TreeViewItem>
</Canvas>