我正在尝试编写一个函数,它将测试结果(具有文本输出和图表输出,分别存储在文本框和实时图表中)写入 pdf 文件。文本输出没有问题,但我无法保存图表,除非我从其父堆栈面板中提取每个图表(每个测试都有一个堆栈面板,在选择测试时显示)然后显示图表在单独的窗口中。有问题的行周围有很多代码,所以我将在下面粘贴一个缩短的版本。
问题似乎是调用“_saveWindow.Show()”而不是“.ShowDialog”。我需要在没有用户输入的情况下打开和关闭它,但是“Show()”根本不会在窗口中绘制图表。
任何想法为什么会发生这种情况?
foreach (TestSequenceItem tsi in resultsToSave)
{
tsi.Instances[0].ChartStackPanel.Visibility = Visibility.Visible;
for (int i=0; i<tsi.Instances[0].StackChartList.Count; i++)
{
Chart _saveChart = tsi.Instances[0].StackChartList[i];
tsi.Instances[0].ChartStackPanel.Children.Remove(_saveChart);
ScrollViewer panel = new ScrollViewer { Content = _saveChart };
Window _saveWindow = new Window { Content = panel };
_saveWindow.Show();
var encoder = new PngBitmapEncoder();
RenderTargetBitmap bmp = new RenderTargetBitmap((int)tsiChartDoc.DefaultPageSetup.PageWidth, 600, 96, 96, PixelFormats.Pbgra32);
bmp.Render(_saveChart);
encoder.Frames.Add(BitmapFrame.Create(bmp));
using (MemoryStream stm = new MemoryStream())
{
encoder.Save(stm);
string fileName = "base64:" + Convert.ToBase64String(stm.ToArray());
// Adding a heading to the pdf
tsiChartDoc.LastSection.AddParagraph(tsi.Instances[0].StackTitleList[i].Text, "Heading2");
tsiChartDoc.LastSection.AddImage(fileName);
}
_saveWindow.Close();
panel.Content = null;
tsi.Instances[0].ChartStackPanel.Children.Insert(chartIdx, _saveChart);
}
}