在 WPF 中对控件进行截图是十分不便的,应用 RenderTargetBitmap 即可实现。然而如果是对 Canvas 这种类型的容器控件进行截图,截图的范畴可能不准。此时能够应用如下办法对 Canvas 进行截图,办法来自 Clemens。
public void WriteToPng(UIElement element, string filename)
{var rect = new Rect(element.RenderSize);
var visual = new DrawingVisual();
using (var dc = visual.RenderOpen())
{dc.DrawRectangle(new VisualBrush(element), null, rect);
}
var bitmap = new RenderTargetBitmap((int)rect.Width, (int)rect.Height, 96, 96, PixelFormats.Default);
bitmap.Render(visual);
var encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bitmap));
using (var file = File.OpenWrite(filename))
{encoder.Save(file);
}
}