2017-09-28 1 views
1

Hoffentlich ist der Titel nicht zu vage, ich bin mir nicht sicher, wie es sonst zu Wort. Was ich versuche (als grundlegendes Beispiel) ist, ein Rechteck programmgesteuert zu einem Canvas hinzuzufügen, dann zu einem späteren Zeitpunkt die lokale Variable in ein neues Rechteck mit anderen Eigenschaften zu ändern und dieses auf der Leinwand zu aktualisieren.Programmatisch erstellt UIElement 'unlinks', wenn lokale Variable Wert auf ein neues UIElement gesetzt

// First rectangle 
Rectangle rect = new Rectangle() 
{ 
    Width = 50, 
    Height = 50, 
    Fill = Brushes.Red, 
    Margin = new Thickness(20, 20, 0, 0) 
}; 

// Add it to the canvas 
mainCanvas.Children.Add(rect); 

// Change something about the rectangle, which works 
rect.Fill = Brushes.Black; 

// Create new rectangle 
Rectangle newRect = new Rectangle() 
{ 
    Width = 15, 
    Height = 20, 
    Fill = Brushes.Blue, 
    Margin = new Thickness(20, 20, 0, 0) 
}; 

// Set the original rectangle to the new rectangle 
rect = newRect; 

// Canvas rectangle is no longer 'linked' to the rect variable :(

Antwort

2

Sie weisen die Variable rect neu zu, dies hat jedoch keinen Einfluss auf Ihre Canvas. Der Canvas-Bereich kennt nur das alte Rechteck rect, auf das verwiesen wird. rect ist nur ein Verweis auf ein Rechteck. Wenn Sie es der Zeichenfläche hinzufügen, kopiert die Zeichenfläche die Referenz. Die Variable rect wird nicht mehr verwendet. Wenn Sie also rect ändern, um auf ein neues Rechteck zu verweisen, ändert sich nichts für die Arbeitsfläche, da die Arbeitsfläche immer noch auf das Original verweist.

Sie werden wahrscheinlich etwas wie folgt tun wollen. Ich mache hier nur einen Stich, also müssen Sie vielleicht nach geeigneten Methoden suchen, aber das gibt Ihnen hoffentlich Orientierung.

mainCanvas.Children.Remove(rect); //take the old rectangle off the canvas 
rect = newRect; 
mainCanvas.Children.Add(rect); //replace the new rectangle on the canvas 
+1

Das war es! Es war ziemlich einfach, die Variable wurde in einer anderen Klasse gespeichert und in dieser Klasse durch eine Methode neu zugewiesen, so dass der Zugriff auf die Arbeitsfläche nicht möglich war. Ich habe es einfach als Parameter übergeben und den von Ihnen vorgeschlagenen Code verwendet. Prost! – Aidan

-1

Sie sollten rect aus dem Canvas entfernen und erneut rect hinzufügen. Was Sie tun, ist ein rect-Objekt auf einen neuen Zeiger.

Verwandte Themen