如何删除或隐藏 OxyPlot 图表上的注释?

Posted

技术标签:

【中文标题】如何删除或隐藏 OxyPlot 图表上的注释?【英文标题】:How to remove or hide comments on an OxyPlot graph? 【发布时间】:2020-03-18 07:45:39 【问题描述】:

如何删除或隐藏OxyPlot 图表上的 cmets?我正在这样做,但它不起作用:

public void AddAnnotation(IEnumerable<Annotation> annotations)

  foreach (var annotation in annotations)
  
    MyOxyPlotModel.Annotations.Add(annotation);
  

  RefreshAxisSeriesPlot();


public void RemoveAnnotation(IEnumerable<Annotation> annotations)

  foreach (var annotation in annotations)
  
    MyOxyPlotModel.Annotations.Remove(annotation);
  

  RefreshAxisSeriesPlot();


private void RefreshAxisSeriesPlot() => MyOxyPlotModel.InvalidatePlot(true);

使用此代码,添加注释有效,但删除注释不起作用。

编辑:

好的,我在代码中发现了问题。 事实上,我还没有完成对我的 LINQ 查询的评估,我从中得到了我的 IEnumerable&lt;Annotation&gt; annotations... 它在 IEnumerable&lt;Annotation&gt; annotations 的每次迭代中重新创建一个新的 Annotation 对象。

【问题讨论】:

如何比较注释?完全相同的 Annotation 可以是内存中的不同对象。 【参考方案1】:

与您之前添加到MyOxyPlotModel.Annotations 的实例相比,您可能将不同的Annotation 实例传递给您的RemoveAnnotation 方法。将Annotations 中不存在的实例传递给Annotations.Remove 不会删除任何内容,因为无法确定要删除的注释。

确保在 AddAnnotationRemoveAnnotation 方法中使用相同的实例,或者使用注释的属性将其与现有的进行比较。

例如,如果您使用派生自 TextualAnnotation 的注解,您可以通过 Text 属性来比较它们。像这样的:

public void RemoveAnnotation(IEnumerable<Annotation> annotations)

    foreach (var annotation in annotations)
    
        if (MyOxyPlotModel.Annotations.Contains(annotation))
            MyOxyPlotModel.Annotations.Remove(annotation);
        else if (annotation is TextualAnnotation ta)
        
            var existingTa = MyOxyPlotModel.Annotations.OfType<TextualAnnotation>().FirstOrDefault(x => x.Text == ta.Text);
            if (existingTa != null)
                MyOxyPlotModel.Annotations.Remove(existingTa);
        
    

    RefreshAxisSeriesPlot();

【讨论】:

谢谢!你让我走上正轨。事实上,我还没有完成对我的 LINQ 查询的评估,我从中得到了我的 IEnumerable&lt;Annotation&gt; annotations... 它在 IEnumerable&lt;Annotation&gt; annotations 的每次迭代中重新创建一个新的 Annotation 对象。

以上是关于如何删除或隐藏 OxyPlot 图表上的注释?的主要内容,如果未能解决你的问题,请参考以下文章

OxyPlot 中日期时间轴上的不规则间隔

如何从Django项目中删除或隐藏应用

以编程方式将系列添加到 OxyPlot 图表:没有显示

如何在 Oxyplot 中为折线图显示绘图点?

如何更改 OxyPlot Y 轴字符串格式?

Xamarin图表开发基础教程OxyPlot框架