MSchart极地图自定义标签无法使用。

3

默认情况下,极地图表上的角度按顺时针方向从0度到360度,但我希望它们按逆时针方向(即逆时针)旋转。

chart.ChartAreas[0].AxisX.Title = "Elevation";
chart.ChartAreas[0].AxisY.Title = "Power(dBm)";
chart.ChartAreas[0].BackColor = System.Drawing.Color.FromArgb(211, 223, 240);
chart.ChartAreas[0].BorderColor = System.Drawing.Color.FromArgb(26, 59, 105);
chart.ChartAreas[0].AxisY.IsStartedFromZero = false;
chart.PrePaint += new EventHandler<ChartPaintEventArgs>(chart_prePaint);

我尝试根据我找到的一些示例代码更改标签,例如:

CustomLabelsCollection labels = chart.ChartAreas[0].AxisX.CustomLabels;

if (labels == null) return;

for (int i = 0; i < labels.Count - 1; i++)
{
    if (labels[0].Text == "360") break;
    labels[i].Text = (360 - int.Parse(labels[i].Text)).ToString();
    labels[i].ToolTip = "Angle in Degrees";
}

代码更改了对象中的标签,但在图表上没有变化。每次事件被触发并且我们重新进入此事件处理程序时,标签都会重置为最初的样子。而工具提示也已重置。
为了增加混淆,我不确定为什么首先会填充CustomLabels对象-我没有这样做。
有任何想法为什么更改没有效果吗?
提前致谢!

你有没有理由编写PrePaint事件的代码?在那里添加固定标签不是一个好主意,因为它可能会被频繁调用。 - TaW
1个回答

1
如果你想要像这样的内容:...

enter image description here

"

..CustomLabels确实是一种实现它的方法。我找不到一种方法使轴自行反转。

这是我使用的C#代码:

"
Axis ay = chart.ChartAreas[0].AxisY;
ay.LabelStyle.Enabled = false;

Axis ax = chart.ChartAreas[0].AxisX;
ax.CustomLabels.Clear();

int  step = (int)ax.Interval;
if (step == 0) step = 30;

for (int i = 0; i < 360; i+=step)
{
    int a = 360 - i;             // the angle to target
    var cl = new CustomLabel();
    cl.Text = a + "°";
    cl.FromPosition = a + 0.01;  // create a small..
    cl.ToPosition = a - 0.01;    // ..space to place the label !
    ax.CustomLabels.Add(cl);
}

请注意,只有标签被反转,不会被反转!
要从0开始,请将循环条件更改为<=并在创建标签之前检查i>0
如果您没有设置Interval,我将使用默认间隔30;根据需要更改!
默认情况下,CustomLabels集合是已创建的,因此它不是null,但是它是空的(Count==0)。如果您没有创建任何自定义标签,则不会显示任何内容,而是显示原始的AxisLabels。(只显示其中一种类型!)
除非您有非常动态的数据等非常好的理由,否则不应在xxxPaint事件中添加或修改任何内容!这些事件可能会被频繁调用,而这些事件实际上只是用于绘制。 (有时也用于测量)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接