Sto scrivendo un'app console lato server in C# /. Net 4.5 che ottiene alcuni dati e crea immagini di grafici statici che vengono salvati per essere visualizzati da un server web.Rendering lato server di WPF UserControl
sto per lo più con il metodo descritto qui: http://lordzoltan.blogspot.com/2010/09/using-wpf-to-render-bitmaps.html
Tuttavia, ho aggiunto un mainContainer.UpdateLayout(); dopo Arrange() in modo che i database si aggiornino e siano visibili nell'immagine renderizzata, così come un Measure() prima di esso per bene ... ah, non ci andrò.
Ecco il metodo che fa il 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);
}
}
Il parametro target per il metodo sarà un'istanza di un WPF/XAML UserControl feci - abbastanza semplice, a questo punto, solo una griglia con una certa assegnamento di testo ad un oggetto ViewModel che ho assegnato al DataContext.
L'immagine salvata sul disco sembra buona ECCETTO per l'oggetto Plot OxyPlot - è completamente bianco.
Ora, quando sono nella finestra di progettazione in Visual Studio 2013, posso vederlo. Ho aggiunto un DataContext in fase di progettazione che è lo stesso oggetto che utilizzo in runtime (questo è un picco che sto facendo - il viewmodel non è ancora nella sua forma definitiva, avendo solo una serie di dati predefiniti mentre risolvo i nodi). Nel designer vedo il grafico come OxyPlot lo dipinge.
C'è qualcosa di speciale che devo fare per far sì che il mio rendering contenga anche questo grafico OxyPlot? È più o meno il punto dell'esercizio, quindi sarebbe fantastico vederlo apparire!
Grazie in anticipo per eventuali approfondimenti e suggerimenti!
Givens la vasta gamma di piattaforme supportate, io sospetto che il problema è nel modo è stato attuato il controllo OxyPlot WPF. Forse è un controllo WinForms incorporato in un controllo WPF, che può essere problematico. Non so se questo aiuti. –
Si potrebbe avere ragione su questo, naturalmente - c'è la possibilità che non ci sia modo di farlo senza il controllo esistente in un ambiente WPF completo. In tal caso, andrò a cercare un altro componente grafico.Tuttavia, se potessi scoprire che cosa fa il progettista, io spero di poterlo attivare per dipingere se stesso .. –
@swiszcz: Potresti spiegare perché le risposte fornite qui non funzioneranno per te? –