2010-12-17 48 views
4

我想在控制台应用程序中呈现一个图表控件(来自WPF工具包http://wpf.codeplex.com)(我实际上从不向用户展示它),但是我继续得到一个空的图像。如果我选择其他控件(例如TextBlock),那么一切都按预期工作。 下面是重现该问题的代码:如何渲染图表(从wpf工具包)控制屏幕?

//开始

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应用程序中运行此代码,其中chart是窗体上显示的控件,则一切正常。人们提到了用于在不同线程上绘制控件的动画。我试图让我的主线程睡着,希望其他人有时间来绘制图表。这里没有运气...

任何想法?我怎样才能使这个控制离屏?

+0

无论如何,在控制台应用程序中运行WPF组件的意义何在?由于您选择的应用程序加载相应的参考DLL,因此这不是一种方便的方法。 – 2010-12-18 15:13:03

+1

在控制台应用程序中执行此操作的原因是我不需要整洁的WPF窗口。我只需要在内存中生成图形,例如将其保存到文件中。当然,我包含所有必需的DLL,所以一切都成功编译。任何想法是什么问题在我的情况? – Michal 2011-01-12 15:32:50

+0

我遇到了同样的问题(但我使用Windows服务代替)和本文[这里](http://stackoverflow.com/questions/1461382/wpf-instantiate-user-control-programmatically-to-render -it-as-png/1468738#1468738)帮助解决它。 – ssarabando 2011-01-31 11:33:12

回答

1

得到今天的解决方案:

  1. 停用图表
  2. 调用方法的图表UpdateLayout()Measure()Arrange()

这就是它的所有动画!

+0

你能指出你如何停用所有动画? – 2013-07-22 11:02:17