2 Stimmen

Teilen Sie dieselbe Vektorsteuerung an verschiedenen Orten

Ich versuche folgendes zu implementieren: Ich habe einen Items Manager, der eine Item-Klasse enthält. Die Item-Klasse kann zwei mögliche visuelle Darstellungen speichern - BitmapImage (Bitmap) und UserControl (Vektor).

Später im Spiel muss ich dann das gleiche Bild oder die gleiche Vektorsteuerung an allen möglichen Stellen teilen, an denen sie verwendet wird. Zum Beispiel können 10 Bäume auf der Karte alle auf dieselbe Vektorsteuerung verweisen. Oder in einigen Fällen kann dies die Bitmap-Bildquelle sein.

Das Problem ist also, dass die BitmapImage-Quelle einfach von mehreren UIElementen in der Anwendung geteilt werden kann. Wenn ich jedoch versuche, die Vektorsteuerung zu teilen, schlägt dies fehl und zeigt an, dass das untergeordnete Element bereits ein untergeordnetes Element einer anderen Steuerung ist. Ich möchte wissen, wie ich dies am besten organisieren kann. Zum Beispiel ersetzen Sie UserControl durch einen anderen Steuerungstyp oder eine andere Speicherung, jedoch muss sichergestellt werden, dass dies Storyboard-Animationen unterstützt.

Der Code sieht so aus:

    if (bi.item.BitmapSource != null)
    {
        Image previewImage = new Image();
        previewImage.Source = bi.item.BitmapSource;
        itemPane.ItemPreviewCanvas.Children.Add(previewImage);
    } else
    if (bi.item.VectorSource != null)
    {
        UserControl previewControl = bi.item.VectorSource;
        itemPane.ItemPreviewCanvas.Children.Add(previewControl);
    }

Oder es ist unmöglich, dieselbe Steuerung an verschiedenen Stellen zu teilen. Was ist dann der beste Weg, um eine Kopie zu machen oder die Vektordaten am besten zu speichern.

Vielen Dank im Voraus

1voto

Alex K Punkte 854

Also, ich habe das Problem gefunden. Es ist möglich, dasselbe UserControl an verschiedene Steuerelemente anzuhängen.

Jedoch, als ich beim Aktualisieren das Steuerelement gelöscht und dann erneut mit einem neuen Zeiger gefüllt habe, der manchmal der gleiche wie vor dem Löschen war, war es auf mysteriöse Weise immer noch im Speicher. Und so sah es aus, als wären 2 gleichzeitig das gleiche Benutzersteuerelement an dasselbe übergeordnete Steuerelement angehängt.

Ich habe eine Zeile Code hinzugefügt, die vor der Aktualisierung mit dem neuen Vector-UserControl alle Kinder im Steuerelement bereinigte, und jetzt funktioniert es einwandfrei.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X