string storyboardName = "MyStoryBoard";
string myXamlElement = "MyXamlElement";
int newLeftPosition = 120;
Storyboard sb = XamlReader.Load(String.Format(
@"<Storyboard xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"" x:Name=""{0}"">
<DoubleAnimation Storyboard.TargetName=""{1}""
Storyboard.TargetProperty=""(Canvas.Left)""
To=""{2}"" Duration=""00:00:00.1200000""/>
</Storyboard>", storyboardName, myXamlElement, newLeftPosition)) as Storyboard;
//Add a delegate to remove the storyboard from resources as soon as it is finished.
sb.Completed += new EventHandler(sb_Completed);
//Add to the resources of the page
this.Resources.Add(sb);
//Begin the storyboard which will animate the element to the correct position.
sb.Begin();
在不少的應用中需要動态的建立動畫作出一些複雜的效果。比如說當當拖拽元素是可以簡單的用c#代碼建立一個storyboard并在這個board中建立一個DoubleAnimation。但是用c#代碼建立動畫會導緻runtime errors因為這還是silverlight的一個bug。但是用 xaml 并load他成為一個簡單的storyboard。
xamlReader 對象有一個非常有用的Load()方法。
這裡要提醒一點 建立Storyboard一定要把屬性些完整了。 不要漏寫了類似x:Name這樣的屬性。 若夠漏寫silverlight不會報任何錯誤。在調試時是直接跳出。
我就犯了這樣的錯誤