Quiero crear una instancia de un control de usuario mediante programación en una DLL para guardarlo posteriormente como archivo PNG. Esto generalmente no es un problema con PngBitmapEncoder y RenderTargetBitmap.WPF Crear una instancia del control del usuario mediante programación para representarlo como PNG
Estos son mis preguntas:
- ¿Cómo crear una instancia del control? Simplemente con el nuevo operador?
- ¿Tengo que crear una instancia en un hilo separado?
- ¿Cómo fuerzo el control para actualizar todos sus elementos secundarios y volver a renderizar?
Este es mi código para crear una instancia del control de usuario y guardarlo como PNG-archivo (LetterFrequency es el control de usuario):
[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);
}
}
Si ejecuta la aplicación de esta manera, se genera el archivo PNG , pero los datos, que se agregarán en el XAML no son visibles, si observa el Diseñador de XAML, puede ver el gráfico con algunas burbujas. El archivo png contiene solo el área del gráfico, pero ¿no hay burbujas? ¿Por qué eso? Creo que es un problema de Actualización/renderizado, pero ¿cómo resolver esto?
Aquí está la solución de estudio visual, contiene el Proyecto de consola, que hace que el usuario controle un archivo PNG y otros dos proyectos del kit de herramientas de WPF para el gráfico.
Tener una mirada en ella, que va a generar el archivo PNG en el bin/depuración, respectivamente, en el exe-carpeta: http://www.file-upload.net/download-1904406/ChartRenderBitmap.zip.html
esperar que funcione sin problemas!
Gracias!
Gracias por su solución interesante, pero la generación de la tabla se debe hacer lo más rápido posible, por lo que hay animación sería el mejor. Para anular la animación, simplemente creé una nueva plantilla de control para el punto de datos de burbuja, pero ahora hay otro problema con el elemento de leyenda. ¡Echa un vistazo a mi respuesta! –