我想在控制台应用程序中呈现一个图表控件(来自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是窗体上显示的控件,则一切正常。人们提到了用于在不同线程上绘制控件的动画。我试图让我的主线程睡着,希望其他人有时间来绘制图表。这里没有运气...
任何想法?我怎样才能使这个控制离屏?
无论如何,在控制台应用程序中运行WPF组件的意义何在?由于您选择的应用程序加载相应的参考DLL,因此这不是一种方便的方法。 – 2010-12-18 15:13:03
在控制台应用程序中执行此操作的原因是我不需要整洁的WPF窗口。我只需要在内存中生成图形,例如将其保存到文件中。当然,我包含所有必需的DLL,所以一切都成功编译。任何想法是什么问题在我的情况? – Michal 2011-01-12 15:32:50
我遇到了同样的问题(但我使用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