在自定义轴之间设置静态 space

Set static space between custom axes

我必须在轴之间有静态 space(比方说 20 像素)。
如果我在左边有更多的轴,可以设置它们的 StartPositionEndPosition 以像素或百分比为单位。

  1. 对于像素设置 - 有什么方法可以得到 space 的高度,轴在哪里(图中的红线)?
  2. 对于百分比设置 - 有什么方法可以自动将 20 像素转换为百分比?如果我知道身高,我可以自己计算,但我不知道如何得到它 - 见 1.

我能够获得整个面板的高度,也就是图表所在的位置,但我不知道从哪里获得左轴 space 的实际高度。

tChart1.Chart.ChartRect 给出 "drawing zone" 的矩形。在您的情况下,您必须在轴计算之前获得该大小,您可以使用 GetAxesChartRect 事件并使用 e.AxesChartRect 如下:

private void testChartRect()
{
  for (int i = 0; i < 4; i++)
  {
    Line line = new Line(tChart1.Chart);
    tChart1.Series.Add(line);
    line.Chart = tChart1.Chart;
    line.FillSampleValues();

    Axis axis = new Axis();
    tChart1.Axes.Custom.Add(axis);
    line.CustomVertAxis = axis;
    axis.AxisPen.Color = line.Color;
    axis.Labels.Font.Color = line.Color;
  }

  tChart1.Aspect.View3D = false;
  tChart1.Panel.MarginLeft = 10;

  //tChart1.AfterDraw += TChart1_AfterDraw1;
  tChart1.GetAxesChartRect += TChart1_GetAxesChartRect;
}

private void TChart1_GetAxesChartRect(object sender, GetAxesChartRectEventArgs e)
{
  Rectangle chartRect = e.AxesChartRect;

  int axisLength = (chartRect.Bottom - chartRect.Top) / tChart1.Axes.Custom.Count;
  int margin = 20;
  for (int i = 0; i < tChart1.Axes.Custom.Count; i++)
  {
    Axis axis = tChart1.Axes.Custom[i];
    axis.StartEndPositionUnits = PositionUnits.Pixels;
    axis.StartPosition = i * axisLength;
    axis.EndPosition = (i + 1) * axisLength - (i != (tChart1.Axes.Custom.Count - 1) ? margin : 0);
  }
}

private void TChart1_AfterDraw1(object sender, Graphics3D g)
{
  tChart1.Graphics3D.Brush.Color = Color.Red;
  tChart1.Graphics3D.Brush.Transparency = 80;
  tChart1.Graphics3D.Rectangle(tChart1.Chart.ChartRect);
}