Feedback

C# - Wpf Canvas-Eigenschaften wieder ändern lassen nach Animation

Veröffentlicht von am 06.02.2014
(0 Bewertungen)
Ich habe Objekte, die mittels Maus bewegt werden sollen in einem Canvas.

Doch die Größe der Elemente sollte sich per Animation abspielen. Die Größenbestimmung erfolgte durch Anfasser an den Ecken und Kanten der Objekte.

Die Animation führte beim Loslassen die Animation zu den Zielen aus.
Doch die Animation hatte auch nach der Beendigung das Objekt im Griff, so dass ich die skalierten/animierten Objekte nicht mehr durch die Maus verschieben ließen, da die Methode zum Verschieben ebenfalls auf die Canvas.Attached-Properties des Objektes zugreift.

Daher muss das Storyboard von jedem animierten Objekt im Anschluss an die Animation gelöst werden; per Storyboard.Remove().

Vorher müssen jedoch die aktuellen Werte des Objektes per Code übertragen werden, da sie sonst verloren gehen und das Objekt die Position und Größe vor der Animation einnehmen würde.

Kurz: Das Verschieben nach der Animation war nicht mehr möglich, weil die Animation zwar zuende, jedoch nicht vom animierten Objekt abgekoppelt war.

Betrifft:
Canvas.LeftProperty
Canvas.TopProperty
GFU-Schulungen  [Anzeige]

C# 2017/2015/2013 Grundlagen

Nach Abschluss des Kurses sind Ihnen die Datentypen und Klassenbibliotheken von C# bekannt. Außerdem sind Sie in der Lage, mit Variablen umzugehen und deren Typen zu konvertieren. Sie definieren Namespaces und setzen diese ein, Sie erstellen eigene Klassen  und bauen Trouble Shooting ein.

XML und .NET Überblick

Um auf dem neuesten Wissensstand zu sein, sollten Sie unser aktuelles ASP .NET Komplett Seminar belegen.
Nach dem Seminar kennen Sie die wichtigsten Strömungen in der Software-Technologie

private void Story_Completed(object sender, EventArgs e)
{
	// Die Story den viewPaint.Resources hinzugefügen, damit sie im Completed Event per .Remove() -Methode entfernt werden kann.
	Storyboard story = (Storyboard)viewPaint.TryFindResource(STORYBOARD_NAME);

	// Die Zielattribute abschreiben und im Objekt sichern.
	Rect targetPosition = new Rect(
		((DoubleAnimation)story.Children[0]).To ?? 0,
		((DoubleAnimation)story.Children[1]).To ?? 0,
		((DoubleAnimation)story.Children[2]).To ?? 0,
		((DoubleAnimation)story.Children[3]).To ?? 0);

	// Das animierte Ziel wurde an jeder DoubleAnimation per Storyboard.SetTarget verankert.
	FrameworkElement animatedTarget = (FrameworkElement)Storyboard.GetTarget(story.Children[0]);
	
	Canas.SetLeft(animatedTarget, targetPosition.X);
	Canas.SetTop(animatedTarget, targetPosition.Y);
	animatedTarget.Width = animatedTarget.ActualWidth;
	animatedTarget.Height = animatedTarget.ActualHeight;

	// Die Animation vom Objekt entfernen, damit sich Canvas-Parameter für das Objekt wieder ändern lassen.
	story.Remove(viewPaint);
}

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!