在自定义轴之间设置静态 space
Set static space between custom axes
我必须在轴之间有静态 space(比方说 20 像素)。
如果我在左边有更多的轴,可以设置它们的 StartPosition
和 EndPosition
以像素或百分比为单位。
- 对于像素设置 - 有什么方法可以得到 space 的高度,轴在哪里(图中的红线)?
- 对于百分比设置 - 有什么方法可以自动将 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);
}
我必须在轴之间有静态 space(比方说 20 像素)。
如果我在左边有更多的轴,可以设置它们的 StartPosition
和 EndPosition
以像素或百分比为单位。
- 对于像素设置 - 有什么方法可以得到 space 的高度,轴在哪里(图中的红线)?
- 对于百分比设置 - 有什么方法可以自动将 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);
}