我正在尝试创建一些图表图像,而不必在屏幕上显示这些图表。我已经尝试了很多不同的方法,但似乎没有什么起作用。如果我先在窗口中显示图表,那么代码就能完美运行,但是如果我不在窗口中显示它,那么位图就只有一个黑色边框的白色背景(不知道为什么)。
我尝试在渲染之前将图表添加到边框中,并给边框添加绿色边框刷。在位图中,我看到了绿色的边框刷,然后是黑色边框和白色背景,但没有图表。图表不包含在黑色边框中,所以我不知道那是从哪里来的。
我尝试将图表添加到窗口中,而不调用window.Show(),结果仍然是黑色边框和白色背景。但是如果我调用window.Show(),位图中就会包含图表。
我尝试使用drawingVisual,如此处所述,但结果相同。
以下是代码(不包括将元素添加到边框或窗口中):
注意:图表是ContentControl。
有没有办法让图表在不先显示窗口的情况下呈现?
我尝试在渲染之前将图表添加到边框中,并给边框添加绿色边框刷。在位图中,我看到了绿色的边框刷,然后是黑色边框和白色背景,但没有图表。图表不包含在黑色边框中,所以我不知道那是从哪里来的。
我尝试将图表添加到窗口中,而不调用window.Show(),结果仍然是黑色边框和白色背景。但是如果我调用window.Show(),位图中就会包含图表。
我尝试使用drawingVisual,如此处所述,但结果相同。
以下是代码(不包括将元素添加到边框或窗口中):
private static BitmapSource CreateElementScreenshot(FrameworkElement element, int dpi)
{
if (!element.IsMeasureValid)
{
Size size = new Size(element.Width, element.Height);
element.Measure(size);
element.Arrange(new Rect(size));
}
element.UpdateLayout();
var scale = dpi/96.0;
var renderTargetBitmap = new RenderTargetBitmap
(
(int)(scale * element.RenderSize.Width),(int)(scale * element.RenderSize.Height),dpi,dpi,PixelFormats.Default
);
// this is waiting for dispatcher to perform measure, arrange and render passes
element.Dispatcher.Invoke(((Action)(() => renderTargetBitmap.Render(element))), DispatcherPriority.Render);
return renderTargetBitmap;
}
注意:图表是ContentControl。
有没有办法让图表在不先显示窗口的情况下呈现?