WPF Instantiate User control программно, чтобы отобразить его как PNG
Я хочу создать экземпляр пользовательского элемента управления программно в DLL, чтобы впоследствии сохранить его в виде файла PNG. Обычно это не проблема с PngBitmapEncoder и RenderTargetBitmap.
Это мои вопросы:
Как мне создать экземпляр управления? Просто с новым оператором?Должен ли я создавать его в отдельном потоке?Как заставить элемент управления обновить все его дочерние элементы и снова отобразить себя?Это мой код для создания пользовательского элемента управления и сохранения его в виде PNG-файла (пользовательский элемент управления LetterFrequency):
[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);
}
}
Если вы запустите приложение таким образом, оно создаст файл PNG, но данные, которые будут добавлены в XAML, не будут видны. Если вы загляните в XAML Designer, вы увидите диаграмму с несколькими пузырьками. Файл PNG содержит только область диаграммы, но без пузырьков? Почему так? Я думаю, что это проблема обновления / рендеринга, но как решить эту проблему?
Вот решение Visual Studio, оно содержит Console Project, который отображает пользовательский элемент управления в файл PNG и два других проекта WPF-инструментария для диаграммы.
Посмотрите на это, он сгенерирует файл PNG в bin / Debug соответственно в exe-папке:http://www.file-upload.net/download-1904406/ChartRenderBitmap.zip.html
Надеюсь, это работает без проблем!
Спасибо!