1

我的 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不写入流的情况下进行初始化。我确实希望它被绘制到图像上,但我需要在图表上进行设置,这需要在光栅化之前知道自动大小范围。

4

1 回答 1

2

您可以强制图表计算轴最小值和最大值

tempChart.ChartAreas["ChartArea1"].RecalculateAxesScale();
于 2013-06-11T09:10:19.017 回答