Seiten

Mittwoch, 3. November 2010

Quick-Tipp: Einfache direkte Storyboard-Verkettung mit extrem reduziertem Quellcode

Bei der Arbeit an meinem aktuellen Projekt hatte ich eine Idee, wie man mehrere Storyboard mit weniger Quellcode miteinander verketten kann. Die vorgestellte Technik reduziert den xaml-Quellcode im vorgestellten Beispiel um fast 50%!

Angenommen, es gibt mehrere Storyboards, die in einer bestimmten Reihenfolge nacheinander gestartet werden sollen. Die übliche Herangehensweise ist, eine gesonderte Methode zu schreiben, in dem das zweite Storyboard gestartet wird, wobei an das Completed()-Ereignis des ersten Storyboard ein Delegat geknüpft wird, der auf die Methode zeigt, die das zweite Storyboard startet, usw.:


Bei einer großen Anzahl an Storyboards führt das schnell zu ziemlich viel Quellcode, der das Projekt aufbläht.

Man kann den Quellcode aber reduzieren, indem man als Delegaten für das Completed()-Ereignis einfach unmittelbar die Methode Storyboard.Begin() anhängt:


Nun mag man sich fragen, wozu soll das gut sein? Wenn ohnehin kein separater Quellcode beim Beenden eines Storyboard aufgerufen wird, ist es doch viel sinnvoller, die beiden Storyboards gleich als ein einziges Storyboard zu definieren und als einziges Storyboard zu starten. Stimmt, aber nicht ganz. Denn sinnvoll ist die hier vorgestellte einfache Verkettung mehrerer Storyboards z.B. in der folgenden Situation:

Das erste Storyboard soll zwei oder drei mal wiederholt werden bevor das zweite aufgerufen wird. Das zweite Storyboard soll auch zwei mal wiederholt werden, usw. Der Sinn der einfachen Verkettung wird deutlich: Die Animation jedes der Storyboards muss nur einmal im xaml definiert werden, wobei im xaml über den Wert des Attributs RepeatBehavior die Anzahl der Wiederholungen gesetzt wird. Wenn man demgegenüber ein einziges Storyboard definieren würde, müßte man die selbe Animation mit der Anzahl der benötigten Wiederholungen mehrfach im xaml definieren. Das würde viel unnötigen Quellcode produzieren. Bei der einfachen direkten Verkettung der Storyboards reduziert sich also der xaml-Quellcode und zugleich der Codebehind. Das gilt vor allem dann, wenn zu den Animationen aufwändige Easing-Funktionen hinzukommen.

Der folgende Quellcode verdeutlicht den Vorteil und die Reduzierung des xaml-Quellcodes. Die Variante mit nur einem Storyboard (sbSingle) hat insgesamt 106 Zeilen xaml-Quellcode. Die Variante mit der direkten und einfachen Verkettung von hier drei Storyboards braucht demgegenüber nur 58 Zeilen xaml-Quellcode. Das ist eine Reduzierung des xaml-Quellcodes um fast 50%!




Den Download des obigen Beispielprojekt findet Ihr in der Expression Gallery.

Keine Kommentare:

Kommentar veröffentlichen