Feedback

C# - TextBlock animiert ein- und ausblenden

Veröffentlicht von am 11/30/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/
	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!