如何删除或隐藏 OxyPlot 图上的注释?
How to remove or hide comments on an OxyPlot graph?
如何删除或隐藏对 OxyPlot 图的评论?我正在这样做,但它不起作用:
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<Annotation> annotations
… 并且它在 IEnumerable<Annotation> annotations
.
的每次迭代中重新创建了一个新的 Annotation
对象
与您之前添加到 MyOxyPlotModel.Annotations
的实例相比,您可能将 Annotation
的不同实例传递给您的 RemoveAnnotation
方法。将 Annotations
中不存在的实例传递给 Annotations.Remove
不会删除任何内容,因为无法确定要删除的注释。
确保在 AddAnnotation
和 RemoveAnnotation
方法中使用相同的实例,或者使用注释的 属性 将其与现有注释进行比较。
例如,如果您使用派生自 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();
}
如何删除或隐藏对 OxyPlot 图的评论?我正在这样做,但它不起作用:
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<Annotation> annotations
… 并且它在 IEnumerable<Annotation> annotations
.
Annotation
对象
与您之前添加到 MyOxyPlotModel.Annotations
的实例相比,您可能将 Annotation
的不同实例传递给您的 RemoveAnnotation
方法。将 Annotations
中不存在的实例传递给 Annotations.Remove
不会删除任何内容,因为无法确定要删除的注释。
确保在 AddAnnotation
和 RemoveAnnotation
方法中使用相同的实例,或者使用注释的 属性 将其与现有注释进行比较。
例如,如果您使用派生自 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();
}