Как вывести Chart (из wpf toolkit) на экран? - PullRequest
4 голосов
/ 17 декабря 2010

Я хочу отобразить элемент управления Chart (из инструментария WPF http://wpf.codeplex.com) в консольном приложении (я никогда его не показываю), но я продолжаю получать пустое изображение. Если я выберу какой-то другой элемент управления ( например TextBlock) тогда все работает как положено. Вот код для воспроизведения проблемы:

// НАЧАЛО

Chart chart = new Chart { Width = 300, Height = 230 };
// Я еще не добавляю серии, потому что я подумал, что, может быть, это вызвало проблемы ...
chart.Background = Brushes.Blue;
chart.BorderBrush = Brushes.Red;
chart.BorderThickness = new Thickness(10);
chart.Title = "Test chart";
chart.Measure(new Size(chart.Width, chart.Height));
chart.Arrange(new Rect(new Size(chart.Width, chart.Height)));

RenderTargetBitmap rtb = new RenderTargetBitmap((int)chart.Width, (int)chart.Height, 96, 96, PixelFormats.Pbgra32);
rtb.Render(chart);
PngBitmapEncoder png = new PngBitmapEncoder();
png.Frames.Add(BitmapFrame.Create(rtb));
using (System.IO.Stream stream = System.IO.File.Create("C:\\chart.png"))
{
png.Save(stream);
}

// END

Если я запускаю этот код не в консоли, а в приложении WPF, где диаграмма - это элемент управления, показанный в форме, все работает нормально. Люди упоминают что-то об анимации, используемой для рисования элемента управления в другом потоке. Я пытался заснуть мой основной поток, надеясь, что другой успеет нарисовать график. Здесь тоже не повезло ...

Есть идеи? Как я могу сделать этот элемент управления вне экрана?

1 Ответ

1 голос
/ 07 июня 2012

Получил решение сегодня:

  1. Отключить все анимации графика
  2. вызов метода UpdateLayout() графика после Measure() и Arrange()

Вот и все!

...