0

我正在尝试编写一个函数,它将测试结果(具有文本输出和图表输出,分别存储在文本框和实时图表中)写入 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);
     }
}
4

0 回答 0