C#应用案例之WPF动画

成品展示

在这里插入图片描述

思路

实现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();
        }

启动调试!!

猜你喜欢

转载自blog.csdn.net/Layfolk_XK/article/details/106500001