DLL でプログラムによってユーザー コントロールをインスタンス化し、後で PNG ファイルとして保存したいと考えています。これは通常、PngBitmapEncoder と RenderTargetBitmap では問題ありません。
これは私の質問です:
- コントロールをインスタンス化するにはどうすればよいですか? 単純に new-operator で?
- 別のスレッドでインスタンス化する必要がありますか?
- コントロールがすべての子を更新し、再びレンダリングするように強制するにはどうすればよいですか?
これは、ユーザー コントロールをインスタンス化し、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 ファイルにはグラフ領域のみが含まれていますが、バブルは含まれていませんか? どうして?更新/レンダリングの問題だと思いますが、これを解決するにはどうすればよいですか?
これはビジュアル スタジオ ソリューションです。これには、ユーザー コントロールを PNG ファイルにレンダリングするコンソール プロジェクトと、チャート用の WPF ツールキットの他の 2 つのプロジェクトが含まれています。
それを見てください、それはexeフォルダーのbin/DebugにそれぞれPNGファイルを生成します:http://www.file-upload.net/download-1904406/ChartRenderBitmap.zip.html
問題なく動作することを願っています!
ありがとう!