2010-11-25 201 views
2

我正在绘制图表控件,我正在绘制“分析范围”,它只是图表上的两条垂直线。当我想更改分析范围时会出现问题,因为我不知道如何只删除两条分析范围线,因此我最终清除了图表并绘制了实际的数据值以及其他值。有没有一种方法来标记这些UI元素(即分析范围是网格线UI元素),以便我可以专门删除它们?我想我可以将UI元素的“索引”保存在某处并删除这些元素,但我想知道是否有更简单的方法来完成此操作。非常感谢。WPF - 有没有办法从Canvas.Children中删除特定的孩子?

回答

2

所有UIElement s都有一个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,列表中仅显示带有Uid of Text1的UIElement

1

当您将两条线添加到Canvas时,您不能持有对这两条线的引用。这样,当您需要重新绘制它们时,只需执行Canvas.Children.Remove(line1)Canvas.Children.Remove(line2)即可。然后更新你的参考线并重新添加到画布。你甚至可以更新这些行的X和Y值,而不是删除和重新添加它们。这样,图表就会移动线条。

但是,基本上关键是在将它们添加到Canvas后保持对这些行的引用。

相关问题