WPF動畫


一,使用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);
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM