我正在绘制图表控件,我正在绘制“分析范围”,这只是图表上的两条垂直线。当我想要更改分析范围时会出现问题,因为我不知道如何仅删除两个分析范围行,因此我最终清除了图表并绘制了实际数据值以及其他内容。有没有办法标记这些UI元素(即分析范围是一个网格线UI元素),以便我可以专门删除它们?我想我可以在某处保存UI元素的“索引”并删除它们,但我想知道是否有更简洁的方法来执行此操作。非常感谢。
答案 0 :(得分:3)
所有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);
}
那应该有用。在调试中对此代码的快速测试显示,Children计数为1,列表中仅显示带有文本1的Uid的UIElement
。
答案 1 :(得分:2)
当您将两行添加到Canvas
时,您不能保留对这两行的引用。这样,当您需要重绘它们时,只需执行Canvas.Children.Remove(line1)
和Canvas.Children.Remove(line2)
。然后更新行的参考,并将它们重新添加到Canvas。您甚至可以只更新行本身的X和Y值,而不是删除和重新添加它们。这样,图表就会移动线条。
但是,基本上关键是在将这些行添加到Canvas
之后保持对行的引用。