WPF Instantiate controle de usuário programaticamente para processá-lo como PNG
Eu quero instanciar um controle de usuário programaticamente em uma DLL para salvá-lo posteriormente como arquivo PNG. Isso geralmente não é problema com PngBitmapEncoder e RenderTargetBitmap.
Estas são minhas perguntas:
Como faço para instanciar o controle? Simplesmente com o novo operador?Eu tenho que instanciá-lo em um thread separado?Como faço para forçar o controle a atualizar todos os seus filhos e a renderizar a si mesmo novamente?Este é o meu código para instanciar o controle de usuário e salvá-lo como arquivo PNG (LetterFrequency é o controle de usuário):
[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 você executar o aplicativo dessa maneira, ele gerará o arquivo PNG, mas os dados, que serão adicionados no XAML, não estarão visíveis. Se você examinar o XAML Designer, poderá ver o gráfico com algumas bolhas. O arquivo png contém apenas a área do gráfico, mas não há bolhas? Porquê isso? Eu acho que é um problema de atualização / renderização, mas como resolver isso?
Aqui está a solução de visual studio, que contém o projeto de console, que processa o controle de usuário para um arquivo PNG e dois outros projetos do kit de ferramentas do WPF para o gráfico.
Dê uma olhada nisso, ele irá gerar o arquivo PNG no bin / Debug, respectivamente, na pasta exe:http://www.file-upload.net/download-1904406/ChartRenderBitmap.zip.html
Espero que funcione sem problemas!
Obrigado!