MSChart - 2个图例可以自动堆叠在右边吗?

MSChart - Can 2 legends be automatically stacked on the right?

我正在用 C# 动态构建图表(.Net Framework 3.5,因此是 MSChart 的第一个版本)。该图表包括一个系列标识符图例和第二个自定义项图例(数据中使用的 table 属性)。

默认情况下,两个图例(A 和 B)与主图表区域(X)并排显示,如下所示:X B A。这会导致图例下方浪费 space 并减小图表。

我已经尝试了我能找到的选项,但即使我将 B 放在中心或远处,它仍然在 X 和 A 之间。有没有办法让它们在垂直堆叠中自动位于右侧?那么 B 会自动定位在 A 之下吗?还是我必须为他们使用手动定位?


编辑:忘记提及一个附加(可能很重要)的细节:我不是以表格形式显示图表,而是调用 SaveImage() 函数来编写 PNG。

您可以尝试这样的操作:

private void chart1_AxisViewChanged(object sender, ViewEventArgs e)
{
    setLegendPosition();
}

private void chart1_Resize(object sender, EventArgs e)
{
    setLegendPosition();
}

private void setLegendPosition()
{
    chart1.Refresh()
    Legend L1 = chart1.Legends[legendOneNameOrIndex];
    Legend L2 = chart1.Legends[legendTwoNameOrIndex];

    L2.Position = new ElementPosition(L1.Position.X, L1.Position.Y + L1.Position.Height, 
                                      L1.Position.Width, L1.Position.Height);
}

这将第二个图例定位在第一个图例的正下方。

您可以将 1 (%) 添加到计算值中以增加一点间距...

如果你想把它放在高度的中间,你可以用50替换计算出的Y位置,即固定50%

如果你想要在两个 Legends 之间固定 space 的 n pixels,只需像这样计算 space:

int pixels = 20;
float space = 100f / chart1.Height * pixels;

并将其添加到 Y-Value!

在创建 Legend..

之后也调用 setLegendPosition();

更新 我原以为修改后的问题不会post任何问题,但我花了一些时间才正确..:[=​​30=]

  • 应该从 Form.Shown 事件中调用图表的设置。
  • setLegendPosition 开头需要一个 chart.Refresh()
  • 我不得不求助于 chart1.DrawToBitmap 方法,而不是使用简单的 chart1.SaveImage

    使用(位图 bmp = 新位图(chart1.ClientSize.Width,chart1.ClientSize.Height)) { chart1.DrawToBitmap(bmp, chart1.ClientRectangle); bmp.Save(你的文件名, ImageFormat.Png);

    }

这是 SaveImageDrawToBitmap 的两个结果:

!