2010-11-25 214 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後保持對這些行的引用。

相關問題