我正在尝试将Visiblox图表呈现给图像,以便能够同时显示数百个图表。图表是在代码中生成的,无需显示即可呈现。
我面临的问题是图表在渲染后看起来是空的。上部控件是图表,底部控件是在将其添加到控件之前呈现的图表。正在进行一些渲染,因为水印就在那里。
使用绑定和datacontext填充图表(以防万一)。在渲染之前查看图表看起来它实际上是空的,谢谢让我问“ UserControl检索绑定的时间是什么时候? ”。
这是我用来渲染图像的代码:
public BitmapSource Render(FrameworkElement control)
{
if (control == null)
{
throw new ArgumentNullException("control");
}
control.UpdateLayout();
Viewbox viewBox = new Viewbox();
viewBox.Child = control; // Control to render
viewBox.Measure(new System.Windows.Size(control.Width, control.Height));
viewBox.Arrange(new Rect(0, 0, control.Width, control.Height));
viewBox.ApplyTemplate();
viewBox.UpdateLayout();
RenderTargetBitmap renderer = new RenderTargetBitmap((int)(control.Width * _dpiX / 96.0), (int)(control.Height * _dpiY / 96.0), _dpiX, _dpiY, PixelFormats.Pbgra32);
DrawingVisual drawingVisual = new DrawingVisual();
using (DrawingContext drawingContext = drawingVisual.RenderOpen())
{
VisualBrush visualBrush = new VisualBrush(viewBox);
drawingContext.DrawRectangle(visualBrush, null, new Rect(new Point(), new System.Windows.Size(control.Width, control.Height)));
}
renderer.Render(drawingVisual);
// Remove the container to be able to reuse the control again if we appended it to a viewbox
viewBox.Child = null;
return renderer;
}
答案 0 :(得分:1)
如果您对将Visiblox图表保存到图像感兴趣,可以在Visiblox博客上找到一些示例代码。你可以在这里找到这篇文章 - http://www.visiblox.com/blog/2011/09/saving-a-chart-as-an-image
本文指导您如何在Silverlight中导出到图像,但下载包含一些示例代码,向您展示如何在WPF中执行此操作。
我以前在我的应用程序中使用过这种技术,我总是发现使用该示例代码是最佳起点!
如果它不适合你,请告诉我 - 我有很多经验!我的提示是确保您在正确的时间在图表上调用了Invalidate(),并确保在尝试导出它之前更新了它的布局。