我的 C# 程序中的 MSChart 以一种特殊的方式运行。在绘制之前,它实际上不会初始化其轴的最大和最小尺寸。观察下面的代码片段。
void drawChart
{
Chart tempChart = new Chart();
Series series1 = new Series();
/* Additional chart setup removed for clarity */
series1.Points.AddXY(0, 4);
series1.Points.AddXY(10, 2);
series1.Points.AddXY(5, 20);
series1.Points.AddXY(8, 9);
series1.Points.AddXY(15, 30);
double max = tempChart.ChartAreas["ChartArea1"].AxisX.Maximum;
Console.WriteLine(max.ToString()); //Output: NaN
MemoryStream theStream = new MemoryStream();
tempChart.SaveImage(theStream, ChartImageFormat.Png);
max = tempChart.ChartAreas["ChartArea1"].AxisX.Maximum;
Console.WriteLine(max.ToString()); //Output: 17
}
如片段所示,当我在我的程序中运行代码时,AxisX.Maximum
在我将其图像写入 a 之前是 NaN MemoryStream
,但之后是适当的 17。
为什么要这样做,更重要的是,我怎样才能强制它在AxisX.Maximum
不写入流的情况下进行初始化。我确实希望它被绘制到图像上,但我需要在图表上进行设置,这需要在光栅化之前知道自动大小范围。