成品展示
思路
实现WPF动画就像是拍电影一样,首先要有剧本,演员角色,故事内容情节,并将电影播放
1.创建故事版 故事版里面基本要确定所有动画的播放规则属性
2.创建故事的内容情节 选择故事(动画)的性质
3.将故事情节内容进行完善
主要用到这5个属性:
(1)Form 设置动画的起始值
(2)To 设置动画的结束值
(3)Duration 设置执行一次动画所需要的时间
(4)Storyboad.SetTarget 设置动画的执行对象
(5)Storyboad.SetTargetProperty 设置动画的执行属性
4.将故事情节添加到故事版中去
5.选择合适的机会开始执行动画(创建一个按钮控制动画开始执行)
代码展示
将故事版和图形目标创建在全局里
Storyboard story = new Storyboard(); //创建故事版 故事版可以容纳多种动画
Border bd = new Border(); //创建图形border目标
this.WindowState = WindowState.Maximized; //设置窗体最大化
//设置border图形的属性值
bd.Width = 200;
bd.Height = 200;
bd.BorderThickness = new Thickness(2); //为border设置边框(borderthickness)
bd.BorderBrush = Brushes.Black;
bd.Background = Brushes.Pink;
Canvas.SetLeft(bd, 0);
Canvas.SetTop(bd,0);
jiemian.Children.Add(bd);
//创建动画开始按钮
Button ks = new Button();
ks.Content = "开始播放";
ks.Width = 100;
ks.Height = 40;
Canvas.SetLeft(ks,Canvas.GetLeft(bd)); //想要获取某个值,要现在之前设置过这个值
Canvas.SetTop(ks,Canvas.GetTop(bd)+bd.Height);
jiemian.Children.Add(ks);
ks.Click += Ks_Click; //创建开始按钮的点击事件
//编辑故事情节 创建double(浮点)动画
DoubleAnimation move = new DoubleAnimation();
//完善故事情节的五大属性
move.From = 100; //设置起始值form 起始值与结束值均为double类型
move.To = 600; //设置结束值to
move.Duration = new Duration(new TimeSpan(0,0,0,3,0)); //设置起始到结束需要的时间
//以上三个属性安排故事情节
//以下设置故事情节所需要的演员
Storyboard.SetTarget(move,bd);
Storyboard.SetTargetProperty(move,new PropertyPath("(Canvas.Left)"));
//还有两个可选的属性
move.AutoReverse = true; //这个属性可以使动画是否往相反的方向运行
//move.RepeatBehavior = new RepeatBehavior(2); //设置动画的执行次数为2次
move.RepeatBehavior = RepeatBehavior.Forever; //设置动画永久性的执行
story.Children.Add(move);
//颜色变换动画
ColorAnimation color = new ColorAnimation(Colors.Purple,Colors.Pink,new Duration(TimeSpan.FromSeconds(3)));
Storyboard.SetTarget(color,bd);
Storyboard.SetTargetProperty(color,new PropertyPath("(Border.Background).(SolidColorBrush.Color)"));
story.Children.Add(color);
color.AutoReverse = true;
color.RepeatBehavior = RepeatBehavior.Forever;
//边框逐渐加粗动画
ThicknessAnimation thickness = new ThicknessAnimation(new Thickness(10), new Duration(TimeSpan.FromSeconds(3)));
Storyboard.SetTarget(thickness,bd);
Storyboard.SetTargetProperty(thickness,new PropertyPath("(BorderThickness)"));
story.Children.Add(thickness);
thickness.AutoReverse = true;
thickness.RepeatBehavior = RepeatBehavior.Forever;
//旋转动画
DoubleAnimation rotate = new DoubleAnimation(0,360,new Duration(TimeSpan.FromSeconds(3)));
Storyboard.SetTarget(rotate,bd);
Storyboard.SetTargetProperty(rotate,new PropertyPath("RenderTransform.Angle"));
story.Children.Add(rotate);
rotate.AutoReverse = true;
rotate.RepeatBehavior = RepeatBehavior.Forever;
RotateTransform rotate1 = new RotateTransform();
bd.RenderTransform = rotate1;
bd.RenderTransformOrigin = new Point(0.5,0.5);
最后别忘了在动画开始按钮的点击事件中将动画开启
private void Ks_Click(object sender, RoutedEventArgs e)
{
story.Begin();
}
启动调试!!