2010-08-22 63 views
1

我在製作Silverlight中的時鐘。我試圖以編程方式設置動畫代碼,因爲我想爲3個時鐘中的每一個重複使用相同的代碼(並且我不認爲我可以用xaml中的單個故事板完成此操作)。以C編程方式創建Silverlight動畫#

 public void Rotate(double toAngle, RotateTransform rotate) 
    { 
     Storyboard sb = new Storyboard(); 

     DoubleAnimationUsingKeyFrames keyframes = new DoubleAnimationUsingKeyFrames(); 

     EasingDoubleKeyFrame easingStart = new EasingDoubleKeyFrame(); 
     easingStart.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0)); 
     easingStart.Value = rotate.Angle; 

     EasingDoubleKeyFrame easingEnd = new EasingDoubleKeyFrame(); 
     easingEnd.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0.5)); 
     easingEnd.Value = toAngle; 
     var ease = new ElasticEase(); 
     ease.EasingMode = EasingMode.EaseIn; 
     easingEnd.EasingFunction = ease; 

     keyframes.KeyFrames.Add(easingStart); 
     keyframes.KeyFrames.Add(easingEnd); 

     Storyboard.SetTarget(keyframes, rotate); 
     Storyboard.SetTargetProperty(keyframes, new PropertyPath("(RotateTransform.Angle)")); 

     sb.Children.Add(keyframes); 
     sb.Begin(); 
    } 

我通過我希望當前手旋轉的角度和該手的旋轉變換。從這個旋轉變換我得到了起始角度。

當我運行時鐘時,時鐘指針移動(秒針每秒移動到正確的位置等),但動畫看起來並不真正生成動畫。他們只是馬上從頭到尾。

爲什麼動畫不能正常發生?

回答

1

跳過問題可能是在開始故事板時想要在不到一秒鐘內顯示更改的滯後。當故事板準備好顯示它時,基本上會說:「哦.​​.....現在是1秒後,現在我應該在處應該」。你最好用更長的故事板。

我不知道有多少你想要控制在你的時鐘,而是使用一個故事板有關,在這裏不用...

我不知道你是想解決整個問題的,但以下示例使用一個簡單的故事板來運行時鐘的三隻手。我遇到的唯一問題是我可以爲時針指定的最大時間間隔(在XAML中),沒有解析錯誤,是23:59:59。

<Storyboard x:Name="SecondHandStoryboard" RepeatBehavior="Forever"> 
     <DoubleAnimation Duration="0:1:0" To="360" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.Rotation)" Storyboard.TargetName="SecondHand" /> 
     <DoubleAnimation Duration="1:0:0" To="360" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.Rotation)" Storyboard.TargetName="MinuteHand"/> 
     <DoubleAnimation Duration="23:59:59" To="360" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.Rotation)" Storyboard.TargetName="HourHand"/> 
    </Storyboard> 

其實我是一個堅實的「嘀」的動畫添加到二手貨,但還沒有想出如何「用」故事板的工作就是讓旋轉。基本上使用重複的6度每秒1秒長的故事板與陡峭的緩和(將繼續研究這個問題)。

無論如何,希望這對你有所幫助。

+0

所以問題是,你想要一個勞力士還是一個關閉?有時候一個淘汰賽太難創造了。 :) – Marc 2011-03-29 05:27:02