一,使用DoubleAnimation創建動畫
//1,創建劇本 Storyboard storyboard = new Storyboard(); //2,創建動畫 DoubleAnimation doubleAnimation = new DoubleAnimation( valueStart,//起始值 valueEnd,//終點值 new Duration(TimeSpan.FromMilliseconds(1000s))//動畫時間域 ); //3,Target Storyboard.SetTarget(doubleAnimation, rect);//Target對象 Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath("(Canvas.Left)"));//Target屬性 //4,在劇本中添加動畫 storyboard.Children.Add(doubleAnimation); //5,在資源中添加劇本 if(!Resources.Contains("animation")) { Resources.Add("animation", storyboard); } //6,開始 storyboard.Begin();
二,使用CompositionTarget
CompositionTarget對象可以根據每個幀回調來創建自定義動畫。
1,注冊事件
CompositionTarget.Rendering += new EventHandler(ReflashView);
2,事件的實現
private void ReflashView(object sender, EventArgs e) { double rectX = Canvas.GetLeft(rect); double rectY = Canvas.GetTop(rect); //算法自擬 Canvas.SetLeft(rect, valueX); Canvas.SetTop(rect, valueY); }
三, DispatcherTimer動畫
基於界面線程的逐幀動畫,與CompositionTarget動畫不同,DispatcherTimer動畫可以很輕松的通過Interval 來控制刷新一個對象屬性的頻率了。
1, 創建一個DispatchTimer
DispatcherTimer dispatcherTimer = new DispatcherTimer(DispatcherPriority.Normal); dispatcherTimer.Tick += dispatcherTimer_Tick; dispatcherTimer.Interval = TimeSpan.FromMilliseconds(50); dispatcherTimer.Start();
2, 實現dispatcherTimer_Tick函數
void dispatcherTimer_Tick(object sender, EventArgs e)
{
double rectX = Canvas.GetLeft(rect); double rectY = Canvas.GetTop(rect); //算法自擬 Canvas.SetLeft(rect, valueX); Canvas.SetTop(rect, valueY);
}