WPF動畫1---基礎動畫
基礎動畫
1.類似於DoubleAnimation等,如要想要同時改變兩個,要寫兩次 比較麻煩 ,無法暫停或停止動畫
任何動畫必須最少三個細節,Form-初始值 To-結束值 Duration-時間長度
其他動畫說明:SpeedRadio 提高或減慢動畫速度 AutoReverse 自動返回初始值 FillBehavior
1 private void button1_Click(object sender, RoutedEventArgs e) 2 { 3 DoubleAnimation widthAnimation = newDoubleAnimation(); 4 widthAnimation.From = 150; 5 widthAnimation.To = 200; 6 widthAnimation.Duration = TimeSpan.FromSeconds(0.5); 7 image1.BeginAnimation(Button.WidthProperty, widthAnimation); 8 }
2.故事板
故事板是增強的時間線,可以使用它分組多個動畫,並且具有控制動畫播放的能力--暫停,停止,改變播放位置等。它能夠使TagetProperty和TagetName屬性指向一個特定的屬性和特定的元素
換句話說,故事板在動畫和希望應用動畫屬性之前架起了一個橋梁
1 private void button2_Click(object sender, RoutedEventArgs e) 2 { 3 Storyboard sb = new Storyboard(); 4 5 DoubleAnimation da = new DoubleAnimation(); 6 da.From = 135;//設置開始值 7 da.To = 200;//設置結束值 8da.Duration = TimeSpan.FromSeconds(0.5);//動畫運行時間 9 sb.Children.Add(da);//把動畫對象加入到該故事板中 10 11 //指定要執行該故事板的對象 12 Storyboard.SetTarget(da, image1); 13 //指定要進行動畫處理的屬性 14 Storyboard.SetTargetProperty(da, new PropertyPath(Button.WidthProperty)); 15 16 17 //sb.Completed += new EventHandler((object sender1, EventArgs e1) => { MessageBox.Show("completed"); }); 18 sb.Begin(); 19 }
3.TranslateTransform
可以通過TranslateTransform的XProperty屬性來更改button1的X坐標.註意到,我們並不是像以前一樣直接關聯到Button的某個屬性(比如先前的WidthProperty),而是通過其RenderTransformProperty屬性的XProperty來間接關聯的,這中方式叫做"屬性鏈"(PropertyChain)
解釋propertyChain ---將RenderTransformProperty設置為TranslateTransform類型,所以第二個元素屬性是TranslateTransform.XProperty),簡單地說就是(類型1.屬性1,類型2.屬性2,....類型n.屬性n)
解釋 new PropertyPath("(0).(1)", propertyChain 中的(0).(1)的意思---propertyChain 是數組,表示propertyChain數組中的TranslateTransform.XProperty屬性(第二個屬性)
1 private void button3_Click(object sender, RoutedEventArgs e) 2 { 3 this.image1.RenderTransform = new TranslateTransform(); 4 5 Storyboard sb = new Storyboard(); 6 DoubleAnimation da = new DoubleAnimation(); 7 da.From = 12; 8 da.To = 100; 9 da.Duration = TimeSpan.FromSeconds(0.5); 10 sb.Children.Add(da); 11 12 DependencyProperty[] propertyChain = new DependencyProperty[] 13 { 14 Image.RenderTransformProperty, 15 TranslateTransform.XProperty 16 }; 17 18 Storyboard.SetTarget(da, this.image1); 19 Storyboard.SetTargetProperty(da, new PropertyPath("(0).(1)", propertyChain)); 20 21 //sb.Completed += new EventHandler((object sender1, EventArgs e1) => { MessageBox.Show("completed"); }); 22 sb.Begin(); 23 }
4.TransformGroup
1.故事板增加TransformGroup 是把多種變化元素組合成一種變化的容器 比較好用
2.故事板Begin開始動畫 只寫一次就可以了
1 //故事板增加TransformGroup 是把多種變化元素組合成一種變化的容器 比較好用 2 //故事板Begin開始動畫 只寫一次就可以了 3 private void button5_Click(object sender, RoutedEventArgs e) 4 { 5 DoubleAnimation daScX = new DoubleAnimation(); 6 DoubleAnimation daScY = new DoubleAnimation(); 7 DoubleAnimation daCor = new DoubleAnimation(); 8 9 //縮放、旋轉、扭曲等變化效果合並起來。以下幾種基本變化只是單一的變化,如果想要實現多種效果的疊加,那麽就要使用到TransformGroup,否則會報錯。TransformGroup的作用類似於在控件布局中的StackPanel內嵌的作用,是把多種變化元素組合成一種變化的容器。 10 TransformGroup tg = new TransformGroup(); //能夠讓某對象的縮放、旋轉、扭曲等變化效果合並起來使用。是把多種變化元素組合成一種變化的容器 11 12 13 ScaleTransform sc = new ScaleTransform(); //縮放 14 15 RotateTransform rt = new RotateTransform(); //旋轉 16 TranslateTransform tt = new TranslateTransform(); //平移 17 SkewTransform st = new SkewTransform(); //扭曲 18 MatrixTransform mt = new MatrixTransform(); //能夠讓某對象通過矩陣算法實現更為復雜的變形。 19 20 21 22 tg.Children.Add(sc); 23 image1.RenderTransform = tg; // RenderTransform類是為了達到直接去改變某個對象的形狀(比如縮放、旋轉一個元素)的目的而設計的,RenderTransform包含的變形屬性成員就是專門用來改變對象形狀的,它可以實現對元素拉伸,旋轉,扭曲等效果,同時變形特效也常用於輔助產生各種動畫效果。 24 image1.RenderTransformOrigin = new Point(0.5, 0.5); 25 //設置故事版 26 27 Storyboard.SetTarget(daCor, image1); 28 Storyboard.SetTargetProperty(daCor, new PropertyPath("(UIElement.Opacity)")); 29 30 31 Storyboard.SetTarget(daScX, image1); 32 Storyboard.SetTargetProperty(daScX, new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)")); 33 34 Storyboard.SetTarget(daScY, image1); 35 Storyboard.SetTargetProperty(daScY, new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)")); 36 37 38 Storyboard sb = new Storyboard(); 39 sb.Children.Add(daScX); 40 sb.Children.Add(daScY); 41 sb.Children.Add(daCor); 42 //設置變換和時間 43 daScX.Duration = new Duration(TimeSpan.FromMilliseconds(100)); 44 daScY.Duration = new Duration(TimeSpan.FromMilliseconds(100)); 45 daCor.Duration = new Duration(TimeSpan.FromMilliseconds(100)); 46 daCor.From = 1; 47 daCor.To = 0.7; 48 49 daScX.From = 1; 50 daScX.To = 0.7; 51 daScY.From = 1; 52 daScY.To = 0.7; 53 sb.AutoReverse = true; 54 sb.Begin(); 55 }
這個是我寫的簡單的動畫demo,寫了20個,簡單的比較全。比較倉促,有錯誤的話可以跟我說下
源碼下載
WPF動畫1---基礎動畫