How To Build a Storyboard Animation for Silverlight in C#
One of the things that I’ve gotten somewhat frustrated in my Silverlight and WPF work is the fact that sometimes (not often, but sometimes), I really need to build a storyboard or keyframe animation programmatically. Especially if you’re doing anything relating to information visualization and you need to create animations for path points, it can be impractical to build a XAML animation and change the values to whatever you need.
By the way, if you need additional help on in depth Silvelright animation, check out Jeff Paries’ excellent Foundation Silverlight 2 Animation.
In response to this dearth, this is a tutorial on how to create a storyboard in code (specifically C#). Basically, I’m just going to show a XAML animation (which is what I’m used to dealing with because Blend builds them for me) and then show how to create that animation in C#.
This animation will animate the first point in a path to the X,Y coordinate 1,1.
XAML animation:
<Storyboard >
<PointAnimationUsingKeyFrames
BeginTime="00:00:00"
Storyboard.TargetName="myPath"
Storyboard.TargetProperty="(Path.Data).(PathGeometry.Figures)[0].(PathFigure.Segments)[0].(LineSegment.Point)">
<EasingPointKeyFrame KeyTime="00:00:01" Value="1,1" />
</PointAnimationUsingKeyFrames>
</Storyboard>
C# animation:
//Code equivalent of: <Storyboard>
Storyboard myNewStoryBoard = new Storyboard();
//Code equivalent of:
//<PointAnimationUsingKeyFrames
// BeginTime="00:00:00"
// Storyboard.TargetName="myPath"
// Storyboard.TargetProperty="(Path.Data).(PathGeometry.Figures)[0].(PathFigure.Segments)[0].(LineSegment.Point)">
PointAnimationUsingKeyFrames myPointAnimation = new PointAnimationUsingKeyFrames();
myPointAnimation.BeginTime = new TimeSpan(0);
Storyboard.SetTargetName(myPointAnimation, myPath.Name);
Storyboard.SetTarget(myPointAnimation, myPath);
Storyboard.SetTargetProperty(myPointAnimation,
new PropertyPath("(Path.Data).(PathGeometry.Figures)[0].(PathFigure.Segments)[0].(LineSegment.Point)"));
//Code equivalen of:
// <EasingPointKeyFrame KeyTime="00:00:01" Value="1,1" />
EasingPointKeyFrame targetKeyFrame = new EasingPointKeyFrame();
targetKeyFrame.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(1000));
targetKeyFrame.Value = new Point(1, 1);
//Add the keyFrame to the animation
myPointAnimation.KeyFrames.Add(targetKeyFrame);
//Add the animation to the Storyboard
myNewStoryBoard.Children.Add(myPointAnimation);
//Now your storyboard is ready to go… just start it
myNewStoryBoard.Begin();
There is not, as far as I know, any way to assign a x:Name property to an object in code. Why? Because if you created the object in code, you should already have a way of accessing it. So the example above is an animation that is looking for a path named “myPath” that is already in the XAML.
If you created your path programmatically (it doesn’t exist in the XAML, but exists in the code), replace this line:
Storyboard.SetTargetName(myPointAnimation, myPath.Name);
with this line.
Storyboard.SetTarget(myPointAnimation, myPath);
where myPath is of type Path and refers to the actual Path you want to animate.

You can actually set the name of an object from code, unless ofcouse the object doesn’t have a name. In other words you can set the name but you can’t rename.
To set name
Object.SetValue(NameProperty, “ObjectName”);
Hi Matthias ! Why don’t you use the “var” keyword and the “Object Initializer” syntax ? It would be much more readable ! Good post BTW
you just found a new daily reader