在渲染控件之前,您必须通过调用手动进行其布局Measure and Arrange。这要求您指定所需的控件大小,例如通过显式设置其 Width 和 Height 属性。
不需要VisualBrush和DrawingVisual,可以直接将控件渲染到RenderTargetBitmap。
chartControl1.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
chartControl1.Arrange(new Rect(0, 0, chartControl1.Width, chartControl1.Height));
chartControl1.UpdateLayout();
var bmp = new RenderTargetBitmap((int)chartControl1.ActualWidth,
(int)chartControl1.ActualHeight, 96, 96, PixelFormats.Pbgra32);
bmp.Render(chartControl1);
如果控件在布局期间(在“测量”中)计算首选尺寸,您也许可以使用它的所需尺寸用于渲染的属性。
chartControl1.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
chartControl1.Arrange(new Rect(new Point(), chartControl1.DesiredSize));
chartControl1.UpdateLayout();
另请注意,渲染线程的公寓状态必须是STA
。在控制台应用程序中,您可以简单地应用STA线程属性到 Main 方法。
[STAThread]
static void Main(string[] args)
{
...
}