Voglio istanziare un controllo utente a livello di codice in una DLL per salvarlo in seguito come file PNG. Questo non è generalmente un problema con PngBitmapEncoder e RenderTargetBitmap.WPF Istanziare il controllo utente a livello di codice per renderlo come PNG
Questo sono le mie domande:
- Come faccio a un'istanza del controllo? Semplicemente con il nuovo operatore?
- Devo creare un'istanza in un thread separato?
- Come impone al controllo di aggiornare tutti i suoi figli e di eseguire nuovamente il rendering?
Questo è il mio codice per creare un'istanza del controllo utente e salvarlo come file PNG (LetterFrequency è il controllo utente):
[STAThread]
static void Main(string[] args)
{
LetterFrequency let = new LetterFrequency();
let.Width = 600;
let.Height = 400;
let.Background = Brushes.White;
let.Measure(new Size(let.Width, let.Height));
let.Arrange(new Rect(new Size(let.Width, let.Height)));
let.UpdateLayout();
RenderTargetBitmap bitmap = new RenderTargetBitmap((int)let.Width, (int)let.Height, 96d, 96d, PixelFormats.Pbgra32);
bitmap.Render(let);
PngBitmapEncoder png = new PngBitmapEncoder();
png.Frames.Add(BitmapFrame.Create(bitmap));
using (Stream stm = File.Create("test.png"))
{
png.Save(stm);
}
}
Se si esegue l'applicazione in questo modo, si genera il file PNG , ma i dati, che verranno aggiunti in XAML non sono visibili, se si guarda in XAML Designer, è possibile vedere il grafico con alcune bolle. Il file png contiene solo l'area del grafico, ma non bolle? Perché quel? Penso che sia un problema di aggiornamento/rendering, ma come risolverlo?
Ecco la soluzione di Visual Studio, contiene il Progetto Console, che rende il controllo utente su un file PNG e altri due progetti del toolkit WPF per il grafico.
Date un'occhiata a questo, verrà generato il file PNG nella bin/Debug, rispettivamente, nella exe-cartella: http://www.file-upload.net/download-1904406/ChartRenderBitmap.zip.html
Spero funziona senza problemi!
Grazie!
Grazie per la vostra soluzione interessante, ma la generazione del grafico dovrebbe essere fatto il più velocemente possibile, in modo da nessuna animazione sarebbe la migliore. Per sovrascrivere l'animazione, ho semplicemente creato un nuovo modello di controllo per il punto dati bolla, ma ora c'è un altro problema con l'elemento legenda. Dai un'occhiata al mio post di risposta! –