我正在編寫一個服務器端控制檯應用程序在C#/ .Net 4.5中獲取一些數據並創建保存以供Web服務器顯示的靜態圖表圖像。WPF用戶控件服務器端呈現
我主要是用在這裏所描述的方法: http://lordzoltan.blogspot.com/2010/09/using-wpf-to-render-bitmaps.html
然而,我添加了一個mainContainer.UpdateLayout();在Arrange()之後,這樣數據綁定就會在渲染後的圖像中更新並可見,還有一個Measure()在它之前是好的......啊,我不會去那裏。
這裏是做渲染的方法:
void RenderAndSave(UIElement target, string filename, int width, int height)
{
var mainContainer = new Grid
{
HorizontalAlignment = HorizontalAlignment.Stretch,
VerticalAlignment = VerticalAlignment.Stretch
};
mainContainer.Children.Add(target);
mainContainer.Measure(new Size(width, height));
mainContainer.Arrange(new Rect(0, 0, width, height));
mainContainer.UpdateLayout();
var encoder = new PngBitmapEncoder();
var render = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Pbgra32);
render.Render(mainContainer);
encoder.Frames.Add(BitmapFrame.Create(render));
using (var s = File.Open(filename, FileMode.Create))
{
encoder.Save(s);
}
}
目標參數的方法將是一個WPF/XAML用戶控件的一個實例,我做了 - 在這一點上相當簡單,只是一些網格將文本數據綁定到我分配給DataContext的ViewModel對象。
磁盤上保存的圖像看起來不錯,除了OxyPlot Plot對象外 - 它完全是白色的。
現在,當我在Visual Studio 2013中的設計師時,我可以看到它。我添加了一個設計時DataContext,它是我在運行時使用的同一個對象(這是我正在做的一個高峯 - viewmodel還沒有達到最終形式,只是有一堆默認數據,而我正在解決這些問題)。在設計師中,我看到了OxyPlot繪製的圖表。
爲了讓我的渲染也包含這個OxyPlot圖表,有什麼特別的我需要做的嗎?這或多或少是練習的重點,所以真正讓它出現的真棒!
在此先感謝您的任何見解和建議!
吉文斯的平臺支持廣泛,我會懷疑,這個問題是在OxyPlot WPF控件是如何實現的。也許它是嵌入在WPF控件中的WinForms控件,可能會有問題。我不知道這是否有幫助。 –
當然,如果沒有完整的WPF環境中的控件,就沒有辦法做到這一點。在那種情況下,我會去尋找另一個製圖組件。但是,如果我只能找出設計師所做的事情,那麼我就不會那麼做,那麼我希望我能觸發它自己繪畫。 –
@swiszcz:你能解釋爲什麼這裏提供的答案不適合你嗎? –