【发布时间】:2023-03-17 02:56:01
【问题描述】:
我有以下问题:
我的 Prism 视图中有一个情节。我的目标是从我的应用程序生成报告,其中包括生成的 OxyPlot 图表。我使用以下行将绘图保存到图像:
plot.SaveBitmap(fileName, 960, 540, OxyColor.FromRgb(255, 255, 255));
当我尝试保存位图而之前未在用户界面中看到该图时,会出现此问题。在这种情况下,我只得到空白图,尺寸正确但没有内容的白色位图。没有轴,没有标题(位图只是空白)。当我使用函数生成 XAML 而不是 Bitmap 时,结果是一样的:根本没有内容。
我还注意到,在保存绘图时,绘图的宽度和高度都设置为 0。在保存函数之前设置此值不会更改结果文件。
我在保存图像之前尝试了以下代码:
plot.InvalidatePlot();
甚至:
plot.InvalidatePlot();
Action emptyAction = delegate { };
plot.Dispatcher.Invoke(DispatcherPriority.Render, emptyAction);
plot.InvalidatePlot();
当我浏览用户界面时,我可以看到情节:保存功能恢复到正确的行为。没有例外,该图在保存之前有我的数据要绘制。
请帮忙...
【问题讨论】:
-
您的绘图代码纯粹是在 XAML 上,还是您以编程方式生成它们?
-
它纯粹是在 XAML 上,但正如我所写,在尝试 SaveImage() 函数时,整个数据已经附加到绘图上。
-
我在使用 oxyplot 时遇到了同样的问题。我试图将图像导出到文件,但只有当我首先在屏幕上显示它时它才起作用。要使其工作,您必须以编程方式定义所有模型,并将模型绑定到 xaml。这样您就不必通过视图来正确导出。
-
非常感谢您的有用回答。我决定重新设计我的应用程序,我可以使用 FlowDocument 创建报告文档。当我可以注入图表控件时,我可以在其中创建额外的 Prism 区域。它会比使用预生成的位图好得多。如果可以,请写下您的评论作为答案,以便我接受。