Feedback

C# - TextBlock animiert ein- und ausblenden

Veröffentlicht von am 30.11.2010
(1 Bewertungen)
Nachdem ich gestern bei einem Film die Einblendungen der „credits“ im Vorspann sah, dachte ich mir : „Das geht doch bestimmt auch ganz einfach mit WPF“.

Habe mich dann auch dran gesetzt und eine kleine Extension-Methode geschrieben, mit welcher man jeden beliebigen TextBlock um eine „credits“-ähnliche Animation erweitern kann. Die Extension-Methode sieht folgendermaßen aus :

public static void AddSmartFadingAnimation( this TextBlock TextBlockToAnimate,
List<string> FadingTextList,
double TextPromptDuration,
double FadingSpeed )

Die Verwendung der Methode ist recht einfach. Man legt einfach ein TextBlock-Control in seiner GUI an, bestimmt alle Eigenschaften (wie der TextBlock auszusehen hat), erstellt ein String-Array (List<sring>), füllt dieses mit den entsprechenden Texten (.add(„Text“)) und wendet die Methode AddSmartFadingAnimation(...) auf dem TextBlock-Objekt an. Eine beispielhafte Verwendung der Methode sieht folgendermaßen aus :

List<string> TextList = new List<string>();
for( int i = 0; i < 10; i++ )
TextList.Add( "Einzublendender Text Nr. " + i );

tblFadingInfo.AddSmartFadingAnimation( TextList, 1000, 1500 );

(tblFadingInfo ist hierbei der Name eines TextBlock-Objektes)


Weiterführende Informationen (Screenshots und Beispielapplikation zum Download) erhaltet ihr in meinem Blog unter : http://dotnet-forum.de/blogs/thearchitect/
GFU-Schulungen  [Anzeige]

VB.NET Komplett

Sie stehen vo der Aufgabe, individuelle Anwendungen für Windows zu schreiben. Hier ist VB.NET die optimale Sprache. Sie erlernt sich recht leicht und passt sich komplett in die .NET Umgebung von Microsoft ein. Nach der Schulung entwickeln Sie anwenderfreundliche Programme in VB.NET . Mit den objektorientierten Modellen in VB.NET erzeugen Sie außerdem wiederverwendbare Komponenten.

VB.NET Aufbau

Sie verfügen nach der Schulung über fundierte Kenntnisse in der Arbeit mit objektorientierten Modellen in VB.NET und können wiederverwendbare Komponenten eigenständig erzeugen.

	public static class SmartTextAnimation
	{
		/// <summary>
		/// Add a fading animation to a 'TextBlock'-Control
		/// </summary>
		/// 
		/// <param name="FadingTextList">The generic List of all strings that have to be shown</param>
		/// <param name="TextPromptDuration">The duration of the text prompt in milliseconds</param>
		/// <param name="FadingSpeed">The speed of the text fading animation in milliseconds</param>
		/// 
		/// <returns></returns>
		/// 
		public static void AddSmartFadingAnimation( this TextBlock TextBoxToAnimate, List<string> FadingTextList,
																							  double TextPromptDuration, double FadingSpeed )
		{
			int index = 0;
			DoubleAnimation FadeOutAnimation = new DoubleAnimation()
			{
				Duration = new Duration( TimeSpan.FromMilliseconds( FadingSpeed ) ),
				To = 0, BeginTime = TimeSpan.FromMilliseconds( TextPromptDuration )
			};
			DoubleAnimation FadeInAnimation = new DoubleAnimation()
			{
				Duration = new Duration( TimeSpan.FromMilliseconds( FadingSpeed ) ),
				To = 1, BeginTime = TimeSpan.FromMilliseconds( TextPromptDuration + FadingSpeed )
			};

			Storyboard FadeInAndOutStoryboard = new Storyboard() { RepeatBehavior = RepeatBehavior.Forever };
			Storyboard.SetTargetProperty( FadeOutAnimation, new PropertyPath( "(Opacity)" ) );
			Storyboard.SetTargetProperty( FadeInAnimation, new PropertyPath( "(Opacity)" ) );
			Storyboard.SetTarget( FadeOutAnimation, TextBoxToAnimate );
			Storyboard.SetTarget( FadeInAnimation, TextBoxToAnimate );

			FadeInAndOutStoryboard.Children.Add( FadeOutAnimation );
			FadeInAndOutStoryboard.Children.Add( FadeInAnimation );

			TextBoxToAnimate.Text = FadingTextList[index++];

			FadeOutAnimation.CurrentStateInvalidated += new EventHandler( (sender, eArgs) =>
			{
				if ( (sender as Clock).CurrentState == ClockState.Filling )
				{
					TextBoxToAnimate.Text = FadingTextList[index];
					if (++index == FadingTextList.Count) index = 0;
				}
			} );

			FadeInAndOutStoryboard.Begin();
		}
	}
Abgelegt unter WPF, GUI, Design, Animation, TextBlock, animierter Text.

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!