我正在一个图表控件上绘制“分析范围”,该范围只是图表上的两条垂直线。当我要更改分析范围时,会出现问题,因为我不知道如何仅删除两条分析范围线,因此最终要清除图表并绘制实际数据值,然后再绘制其他内容。有没有一种方法来标记这些UI元素(即分析范围是网格UI元素),以便我可以专门删除它们?我想我可以将UI元素的“索引”保存在某个地方并删除它们,但是我想知道是否有更干净的方法可以做到这一点。非常感谢。

最佳答案

所有UIElement都有一个UID,它是一个字符串。您可以将范围线的UID设置为可预测的值。请记住,UID必须唯一。然后,当您只需要删除网格线时,可以遍历Children集合,收集需要删除的UI元素列表,然后将其删除。

像这样:

Canvas c = new Canvas();
c.Children.Add( new UIElement() { Uid = "Line1" } );
c.Children.Add( new UIElement() { Uid = "Line2" } );
c.Children.Add( new UIElement() { Uid = "Line3" } );
c.Children.Add( new UIElement() { Uid = "Text1" } ); //This is added as a sample

List<UIElement> itemstoremove = new List<UIElement>();
foreach (UIElement ui in c.Children)
{
  if (ui.Uid.StartsWith("Line"))
  {
    itemstoremove.Add(ui);
  }
}
foreach (UIElement ui in itemstoremove)
{
  c.Children.Remove(ui);
}


那应该工作。在调试中对该代码进行的快速测试显示,子代数为1,列表中仅存在UIElement,且Uid为Text1。

10-06 07:53