MSChart Customlabel 参考不持久

MSChart Customlabel reference not persisting

请耐心等待我的解释,因为代码在我无法复制的计算机上。

我在 C# 中使用 MSChart 和 CustomLabels。我有另一个对象的树类型列表,每个对象都有一个自定义标签作为 class 的一部分。 示例:

public class item
{
   public CustomLabel label = new CustomLabel();
   public List<item> children = new List<item>();
}

我在这些 classes 中设置标签,然后将它们推入 YAxis (chartArea) 示例:

item.label.text = "some text";
chartArea.YAxis.CustomLabels.Add(item.label);

在代码的后面,我需要更改标签的文本以便访问我的 class 标签(已验证 class 相同)

item.label.text = "new text";

但是当我检查 CustomLabels 列表时,文本值仍然是旧值

(chartArea.YAxis.CustomLabels[0].文本 == "some text")

我不明白为什么会这样。我认为实例化对象是引用。因此文本应该是"new text";

我有可折叠的标签,这就是我需要这样做的原因。请帮助我理解。

是的,它们是对象,但在添加它们时,您并不是简单地将它们添加为参考,而是它们似乎被复制到图表中。

(很难说,因为似乎没有 MSChart 的来源。)

因此:您需要或者重新分配CustomLabels或者改变它们的属性。

不需要重新添加,重新赋值即可。为此,您需要跟踪您拥有的标签。只有一个,这很简单:

chart.ChartAreas[0].AxisX.CustomLabels[0] = yourItem.Label;

要更改 Text 到位:

chart.ChartAreas[0].AxisX.CustomLabels[0].Text = yourItem.Label.Text;

此行为不同于 DataPoints。在那里你可以保留一个参考,改变值,它会显示..

更新:

出于好奇,我对我能想到的所有其他 ChartElement 类型进行了相同的测试,即 Annotations, ChartAreas, Legends, Series, Titles, LegendCellColumns and DataPoints。事实证明,它们都被正确引用了,只有当您 Add 时,对 CustomLabels 的引用才被破坏。

调查 CustomLabelsCollection Class 我看不出这种行为的原因..

以下是小测试的前后对比: