C# 更好的AxisArrowStyle箭头用于我的图表。Axis

C# 更好的AxisArrowStyle箭头用于我的图表。Axis,c#,charts,axis,C#,Charts,Axis,我回答了一个关于如何设置一个图表使其看起来像一个规则的数学图形,即轴居中,顶部和右侧有漂亮的箭头 然而,我发现内置的是相当大,并没有办法使它更小 线-一个线形箭头用于相关轴 无-无箭头用于相关轴 锐角三角形-锐角三角形箭头用于相关轴 三角形-三角形箭头用于相关轴 以下是它的原始外观: 那么我们如何解决这个问题呢?图表的轴。AxisArrowStyle枚举不允许我们选择较小的箭头,只允许选择较细的箭头 所以我们需要自己画出来: 下面是一段简单但有效的代码,可以实现以下目标: private v

我回答了一个关于如何设置一个
图表
使其看起来像一个规则的数学图形,即轴居中,顶部和右侧有漂亮的箭头

然而,我发现内置的是相当大,并没有办法使它更小

线-一个线形箭头用于相关轴

无-无箭头用于相关轴

锐角三角形-锐角三角形箭头用于相关轴

三角形-三角形箭头用于相关轴

以下是它的原始外观:


那么我们如何解决这个问题呢?

图表的
轴。AxisArrowStyle
枚举不允许我们选择较小的箭头,只允许选择较细的箭头

所以我们需要自己画出来:

下面是一段简单但有效的代码,可以实现以下目标:

private void chart1_PrePaint(object sender, ChartPaintEventArgs e)
{
    if (e.ChartElement.ToString().StartsWith("ChartArea-") )
    {
        // get the positions of the axes' ends:
        ChartArea CA = chart1.ChartAreas[0];
        float xx = (float)CA.AxisX.ValueToPixelPosition(CA.AxisX.Maximum);
        float xy = (float)CA.AxisY.ValueToPixelPosition(CA.AxisY.Crossing);
        float yx = (float)CA.AxisX.ValueToPixelPosition(CA.AxisX.Crossing);
        float yy = (float)CA.AxisY.ValueToPixelPosition(CA.AxisY.Maximum);

        // a simple arrowhead geometry:
        int arrowSize = 18;   // size in pixels
        Point[] arrowPoints = new Point[3]   { new Point(-arrowSize, -arrowSize / 2), 
             new Point(-arrowSize, arrowSize / 2), Point.Empty };

        // draw the two arrows by moving and/or rotating the graphics object:
        e.ChartGraphics.Graphics.TranslateTransform(xx + arrowSize, xy);
        e.ChartGraphics.Graphics.FillPolygon(Brushes.Black, arrowPoints);
        e.ChartGraphics.Graphics.TranslateTransform(yx -xx -arrowSize, yy -xy -arrowSize);
        e.ChartGraphics.Graphics.RotateTransform(-90);
        e.ChartGraphics.Graphics.FillPolygon(Brushes.Black, arrowPoints);
        e.ChartGraphics.Graphics.ResetTransform();
    }
}