2010-11-25 2 views
2

Ich arbeite an einem Charting-Steuerelement, wo ich den "Analysebereich" grafiere, der nur zwei vertikale Linien auf dem Diagramm ist. Ein Problem tritt auf, wenn ich den Analysebereich ändern möchte, weil ich nicht weiß, wie man nur die zwei Analysebereichslinien entfernt, so dass ich am Ende das Diagramm lösche und die tatsächlichen Datenwerte und was noch einmal anzeige. Gibt es eine Möglichkeit, diese UI-Elemente zu markieren (d. H. Der Analysebereich ist ein gridline-UI-Element), sodass ich sie spezifisch entfernen kann? Ich nehme an, ich könnte den "Index" des UI-Elements irgendwo speichern und löschen, aber ich frage mich, ob es einen saubereren Weg dafür gibt. Danke vielmals.WPF - Gibt es eine Möglichkeit, bestimmte Kinder aus Canvas.Children zu entfernen?

Antwort

2

Alle UIElement s haben eine UID, die eine Zeichenfolge ist. Sie könnten die UID der Bereichslinien auf etwas vorhersagbares setzen. Bedenken Sie, dass die UID eindeutig sein muss. Wenn Sie nur die Gitternetzlinien entfernen müssen, durchlaufen Sie die Children-Sammlung und sammeln eine Liste der zu entfernenden Elemente der Benutzeroberfläche, die Sie dann entfernen müssen.

Etwas wie folgt aus:

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); 
} 

Das sollte funktionieren. Ein schneller Test dieses Codes im Debug zeigt die Children-Zählung bei 1 an, wobei nur die UIElement mit Uid of Text1 in der Liste vorhanden ist.

1

Wenn Sie die beiden Zeilen zum Canvas hinzufügen, können Sie nicht einen Verweis auf die beiden Zeilen halten. Auf diese Weise, wenn Sie sie neu zeichnen müssen, tun Sie einfach Canvas.Children.Remove(line1) und Canvas.Children.Remove(line2). Aktualisieren Sie dann Ihre Referenzen für die Linien und fügen Sie sie erneut dem Canvas-Bereich hinzu. Sie könnten sogar einfach die X- und Y-Werte der Zeilen selbst aktualisieren, anstatt sie zu entfernen und neu hinzuzufügen. Auf diese Weise würde das Diagramm nur die Linien verschieben.

Aber im Grunde ist der Schlüssel, einen Verweis auf die Zeilen nach dem Hinzufügen von ihnen zu der Canvas beizubehalten.

Verwandte Themen