我希望能够在DLL中以编程方式实例化用户控件,然后将其保存为PNG文件。使用PngBitmapEncoder和RenderTargetBitmap通常不会有问题。
这是我的问题:
- 我如何实例化控件?只需使用new运算符吗? - 我需要在单独的线程中实例化它吗? - 我如何强制控件更新所有子项并再次呈现自身?
这是我实例化用户控件并将其保存为PNG文件的代码(LetterFrequency是用户控件):
如果您以这种方式运行应用程序,它会生成PNG文件,但将添加到XAML中的数据不可见。如果您查看XAML设计器,则可以看到带有一些气泡的图表。PNG文件仅包含图表区域,而没有气泡?为什么?我认为这是一个更新/渲染问题,但如何解决?
这是Visual Studio解决方案,它包含控制台项目,该项目将用户控件呈现为PNG文件以及WPF工具包的其他两个项目。
请查看它,它将在bin / Debug或exe文件夹中生成PNG文件:http://www.file-upload.net/download-1904406/ChartRenderBitmap.zip.html 希望它能无问题地工作!
谢谢!
这是我的问题:
- 我如何实例化控件?只需使用new运算符吗? - 我需要在单独的线程中实例化它吗? - 我如何强制控件更新所有子项并再次呈现自身?
这是我实例化用户控件并将其保存为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设计器,则可以看到带有一些气泡的图表。PNG文件仅包含图表区域,而没有气泡?为什么?我认为这是一个更新/渲染问题,但如何解决?
这是Visual Studio解决方案,它包含控制台项目,该项目将用户控件呈现为PNG文件以及WPF工具包的其他两个项目。
请查看它,它将在bin / Debug或exe文件夹中生成PNG文件:http://www.file-upload.net/download-1904406/ChartRenderBitmap.zip.html 希望它能无问题地工作!
谢谢!