Не удалось захватить живую диаграмму WPF в растровом изображении

Я пытаюсь написать функцию, которая будет записывать результаты теста (которые имеют как текстовый вывод, так и вывод диаграммы, хранящиеся в текстовом поле и диаграмме livecharts соответственно) в файл 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);
     }
}

0 ответов

Другие вопросы по тегам