在RowIndex上的MSChart轴CustomLabel角度> 0

时间:2017-03-03 07:56:57

标签: c# label axis mschart

使用VisualStudio WindowsForms表单。在设计器中创建图表控件。

我尝试在图表上添加一些customLabel轴 WITH 默认标签。 为此,我使用 RowIndex property = 1添加customLabels。因此,我看到默认标签和我的customLabels。 现在的问题是,当默认标签旋转正确时,我的自定义标签不是。

Axis属性LabelStyle.Angle仅影响RowIndex = 0中的标签,即默认标签。 如果我将customLabels放在RowIndex = 0 - 所有默认标签都将消失。

我所看到的:

enter image description here

我想看到的内容:

enter image description here

1 个答案:

答案 0 :(得分:0)

我认为没办法,真的。原因可能是开发人员认为,一旦你开始将它们放在一个或多个额外的行中,就没有足够的空间用于水平标签。

以下是解决方法:在{{1}中按照您的意愿,将CustomLabels所有透明绘制设置为xxxPaint事件。

以下是一个例子:

我准备了CustomLabels

CustomLabel cl = new CustomLabel();
cl.ForeColor = Color.Transparent;
cl.RowIndex = 1;
...

我像这样编码图纸:

private void chart1_PostPaint(object sender, ChartPaintEventArgs e)
{
    Axis ay = chart1.ChartAreas[0].AxisY;
    foreach (var cl in ay.CustomLabels)
    {
        if (cl.RowIndex == 1)
        {
            double vy = (cl.ToPosition + cl.FromPosition) / 2d;
            int y = (int)ay.ValueToPixelPosition(vy);
            e.ChartGraphics.Graphics.DrawString(cl.Text, 
                         cl.Axis.TitleFont, Brushes.DarkRed, 0, y);
        }
    }
}

请使用您自己喜欢的FontBrush。结果如下:

enter image description here

请注意,您可能需要通过调整ChartArea.PositionChartArea.InnerPlotPosition来左侧创建更多空格,这两个位于100%,并且像往常一样默认为&# 39; auto'

对于更多行,您需要将检查更改为cl.RowIndex < 0,并为DrawString找到一个不错的x位置值。