Piszę aplikację konsoli po stronie serwera w C#/.NET 4.5, która pobiera pewne dane i tworzy statyczne obrazy wykresu, które są zapisywane do wyświetlania przez serwer WWW.Renderowanie po stronie serwera WPF UserControl
ja głównie za pomocą metody opisanej tutaj: http://lordzoltan.blogspot.com/2010/09/using-wpf-to-render-bitmaps.html
Jednak dodano mainContainer.UpdateLayout(); po aranżacji(), aby databindings zaktualizowały się i były widoczne w renderowanym obrazie, jak również Measure() przed nim na dobre ... ach, nie zamierzam tam iść.
Oto metoda, która robi rendering:
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);
}
}
Parametr target metody będzie instancją WPF/XAML UserControl zrobiłem - dość proste, w tym momencie, tylko siatka z niektórych tekstowe powiązanie danych z obiektem ViewModel, który został przypisany do DataContext.
Zapisany obraz na dysku wygląda dobrze, Z WYJĄTKIEM obiektu OxyPlot Plot - jest całkowicie biały.
Teraz, gdy jestem w projektancie w Visual Studio 2013, widzę to. Dodałem obiektowy obiekt DataContext, który jest tym samym obiektem, którego używam w środowisku wykonawczym (jest to skok, który robię - model podglądu nie jest jeszcze w ostatecznej formie, po prostu ma masę domyślnych danych, podczas gdy ja pracuję nad supłami). W projektancie widzę wykres, jak OxyPlot go maluje.
Czy jest coś szczególnego, co muszę zrobić, aby moje renderowanie zawierało również ten wykres OxyPlot? To jest mniej więcej punkt ćwiczenia, więc byłoby wspaniale, gdyby to się pojawiło!
Z góry dziękujemy za wszelkie uwagi i sugestie!
Givens szeroki wachlarz obsługiwanych platform, to podejrzewam, że problem jest w tym, jak kontrola OxyPlot WPF został wdrożony. Być może jest to kontrolka WinForms osadzona w formancie WPF, co może być problematyczne. Nie wiem, czy to pomaga. –
Oczywiście możesz mieć rację - istnieje szansa, że nie da się tego zrobić bez kontroli istniejącej w pełnym środowisku WPF. W takim przypadku będę szukał innego składnika wykresów.Jednak gdybym mógł po prostu dowiedzieć się, co projektant robi, czego ja nie mam, to mam nadzieję, że uda mi się go samemu namalować. –
@swiszcz: Czy mógłbyś wyjaśnić, dlaczego podane tutaj odpowiedzi nie będą dla ciebie skuteczne? –