検索して検索しましたが、私と同じ問題を抱えているものは見つかりませんでした。WPF アプリケーションの高解像度/dpi スクリーンショットをレンダリングしようとしています。唯一の問題は、スクリーンショットを問題なく保存できることを除けば、レンダリングにチャートのツールチップからの情報を含める必要があることです。
現在 Infragistics XamDataChart を使用しており、xaml ではなくコードでツールチップを生成しています。
ツールチップをビジュアル ツリーに表示してレンダリングする方法を知っている人はいますか? または、ウィンドウ全体と、ツールチップ オーバーレイを含むその内部のすべてをレンダリングできるようにするには?
レンダリングのコード:
public static void RenderVisualToFile(this FrameworkElement visual)
{
var width = (int)visual.RenderSize.Width;
var height = (int)visual.RenderSize.Height;
RenderTargetBitmap renderTarget = new RenderTargetBitmap(width * 4, height * 4, 384, 384, PixelFormats.Pbgra32);
renderTarget.Render(visual);
// Encode and save to PNG file
var enc = new PngBitmapEncoder();
enc.Frames.Add(BitmapFrame.Create(renderTarget));
if (Directory.Exists("Screenshots"))
{
using (var stm = File.Create(@"Screenshots\Render_" + DateTime.Now.ToString("yyMMMdd_HHmmss") + ".png"))
enc.Save(stm);
}
else
{
Directory.CreateDirectory("Screenshots");
using (var stm = File.Create(@"Screenshots\Render_" + DateTime.Now.ToString("yyMMMdd_HHmmss") + ".png"))
enc.Save(stm);
}
}
そして、これを MainWindow のコード ビハインドで呼び出します。
if (e.Key == Key.PrintScreen)
{
this.RenderVisualToFile();
}