Я пишу приложение на стороне сервера на С#/.NET 4.5, которое получает некоторые данные и создает статические изображения диаграммы, которые сохраняются для отображения веб-сервером.
В основном я использую описанный здесь метод: 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 UserControl - довольно простой в данный момент, просто сетка с некоторой привязкой текстовой привязки к объекту ViewModel, который я назначил DataContext.
Сохраненное изображение на диске выглядит хорошим ИСКЛЮЧИТЬ для объекта OxyPlot Plot - он полностью белый.
Теперь, когда я нахожусь в дизайнере в Visual Studio 2013, я это вижу. Я добавил TimeContext времени разработки, который является тем же самым объектом, который я использую во время выполнения (это - шип, который я делаю - модель представления еще не имеет окончательной формы, просто имея кучу данных по умолчанию, пока я разрабатываю изломы). В дизайнере я вижу диаграмму в качестве OxyPlot.
Есть ли что-то особенное, что мне нужно сделать, чтобы мой рендеринг также содержал эту диаграмму OxyPlot? Это более или менее точка упражнения, поэтому было бы здорово отобразить его!
Заранее благодарим за любые идеи и предложения!