WPF编程,WIN8加载动画,滑动的点

版权声明:我不生产代码,我只是代码的搬运工。 https://blog.csdn.net/qq_43307934/article/details/86523882

效果:

新增一个用户控件

1、前台

 <Grid Margin="5">
        <Grid.RowDefinitions>
            <RowDefinition Height="*"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
        </Grid.RowDefinitions>
        <Canvas x:Name="root"
                Grid.Row="0"
                Height="6">
            <Ellipse x:Name="e1"
                     Width="6"
                     Height="6"
                     Fill="Yellow"
                     Canvas.Left="-6"></Ellipse>
            <Ellipse x:Name="e2"
                     Width="6"
                     Height="6"
                     Fill="Yellow"
                     Canvas.Left="-6"></Ellipse>
            <Ellipse x:Name="e3"
                     Width="6"
                     Height="6"
                     Fill="Yellow"
                     Canvas.Left="-6"></Ellipse>
            <Ellipse x:Name="e4"
                     Width="6"
                     Height="6"
                     Fill="Yellow"
                     Canvas.Left="-6"></Ellipse>
            <Ellipse x:Name="e5"
                     Width="6"
                     Height="6"
                     Fill="Yellow"
                     Canvas.Left="-6"></Ellipse>
            <Ellipse x:Name="e6"
                     Width="6"
                     Height="6"
                     Fill="Yellow"
                     Canvas.Left="-6"></Ellipse>
        </Canvas>
        <TextBlock Grid.Row="1"
                   Text="正 在 加 载..."
                   Foreground="White"
                   HorizontalAlignment="Center"
                   VerticalAlignment="Center"></TextBlock>
    </Grid>

2、后台

 public partial class PointProgressBar : UserControl
    {
        public PointProgressBar()
        {
            InitializeComponent();
            this.Loaded += PointProgressBar_Loaded;
        }
        private Storyboard sb = null;
        private double value2 = 200;//中间距离
        void PointProgressBar_Loaded(object sender, RoutedEventArgs e)
        {
            if (sb == null)
            {
                sb = new Storyboard();
            }
            double value3 = this.root.ActualWidth;//获取容器呈现宽度
            double value1 = (value3 - value2) / 2;//计算第一段移动距离
            sb.Children.Add(EllipseAnimation(value1, value1 + value2, value3, TimeSpan.FromSeconds(0), e1));
            sb.Children.Add(EllipseAnimation(value1, value1 + value2, value3, TimeSpan.FromSeconds(0.2), e2));
            sb.Children.Add(EllipseAnimation(value1, value1 + value2, value3, TimeSpan.FromSeconds(0.4), e3));
            sb.Children.Add(EllipseAnimation(value1, value1 + value2, value3, TimeSpan.FromSeconds(0.6), e4));
            sb.Children.Add(EllipseAnimation(value1, value1 + value2, value3, TimeSpan.FromSeconds(0.8), e5));
            sb.Children.Add(EllipseAnimation(value1, value1 + value2, value3, TimeSpan.FromSeconds(1.0), e6));
            sb.RepeatBehavior = RepeatBehavior.Forever;
            sb.Begin();
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="value1">第一阶段移动距离</param>
        /// <param name="value2">第二阶段移动距离</param>
        /// <param name="value3">第三阶段移动距离</param>
        /// <param name="startTime">动画开始时间</param>
        /// <param name="element">目标元素</param>
        /// <returns>DoubleAnimationUsingKeyFrames</returns>
        private DoubleAnimationUsingKeyFrames EllipseAnimation(double value1, double value2, double value3, TimeSpan startTime, UIElement element)
        {
            DoubleAnimationUsingKeyFrames doubleAnimationUsingKeyFrames = new DoubleAnimationUsingKeyFrames();
            doubleAnimationUsingKeyFrames.BeginTime = startTime;
            EasingDoubleKeyFrame easingDoubleKeyFrame1 = new EasingDoubleKeyFrame();
            easingDoubleKeyFrame1.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0.5));
            easingDoubleKeyFrame1.Value = value1;
            EasingDoubleKeyFrame easingDoubleKeyFrame2 = new EasingDoubleKeyFrame();
            easingDoubleKeyFrame2.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(2.1));
            easingDoubleKeyFrame2.Value = value2;
            EasingDoubleKeyFrame easingDoubleKeyFrame3 = new EasingDoubleKeyFrame();
            easingDoubleKeyFrame3.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(2.6));
            easingDoubleKeyFrame3.Value = value3;
            doubleAnimationUsingKeyFrames.KeyFrames.Add(easingDoubleKeyFrame1);
            doubleAnimationUsingKeyFrames.KeyFrames.Add(easingDoubleKeyFrame2);
            doubleAnimationUsingKeyFrames.KeyFrames.Add(easingDoubleKeyFrame3);
            Storyboard.SetTarget(doubleAnimationUsingKeyFrames, element);
            Storyboard.SetTargetProperty(doubleAnimationUsingKeyFrames, new PropertyPath("(Canvas.Left)"));
            return doubleAnimationUsingKeyFrames;
        }

    }

3、调用 

            PointProgressBar pon = new PointProgressBar();

            pon.Width = 300;
            pon.Height = 30;
            pon.HorizontalAlignment = System.Windows.HorizontalAlignment.Center;

            xamlgrid.Children.Add(pon);

4、另一种加载样式

效果:

代码: 

            <Viewbox>
                <Grid Height="800"
                      Width="800">

                    <Grid.Triggers>
                        <EventTrigger RoutedEvent="FrameworkElement.Loaded">
                            <BeginStoryboard>
                                <Storyboard RepeatBehavior="Forever">
                                    <!--Rect1-->
                                    <ColorAnimation BeginTime="0:0:0.0"
                                                    Storyboard.TargetName="Rect1"
                                                    Duration="0:0:1"
                                                    Storyboard.TargetProperty="Fill.Color"
                                                    To="#00FFFFFF" />

                                    <!--Rect2-->
                                    <ColorAnimation BeginTime="0:0:0.0"
                                                    Storyboard.TargetName="Rect2"
                                                    Duration="0:0:0.125"
                                                    Storyboard.TargetProperty="Fill.Color"
                                                    To="#00FFFFFF" />
                                    <ColorAnimation BeginTime="0:0:0.125"
                                                    Storyboard.TargetName="Rect2"
                                                    Duration="0:0:0.875"
                                                    Storyboard.TargetProperty="Fill.Color"
                                                    From="#FFFFFFFF"
                                                    To="#20FFFFFF" />

                                    <!--Rect3-->
                                    <ColorAnimation BeginTime="0:0:0.0"
                                                    Storyboard.TargetName="Rect3"
                                                    Duration="0:0:0.250"
                                                    Storyboard.TargetProperty="Fill.Color"
                                                    To="#00FFFFFF" />
                                    <ColorAnimation BeginTime="0:0:0.250"
                                                    Storyboard.TargetName="Rect3"
                                                    Duration="0:0:0.750"
                                                    Storyboard.TargetProperty="Fill.Color"
                                                    From="#FFFFFFFF"
                                                    To="#40FFFFFF" />

                                    <!--Rect4-->
                                    <ColorAnimation BeginTime="0:0:0.0"
                                                    Storyboard.TargetName="Rect4"
                                                    Duration="0:0:0.375"
                                                    Storyboard.TargetProperty="Fill.Color"
                                                    To="#00FFFFFF" />
                                    <ColorAnimation BeginTime="0:0:0.375"
                                                    Storyboard.TargetName="Rect4"
                                                    Duration="0:0:0.625"
                                                    Storyboard.TargetProperty="Fill.Color"
                                                    From="#FFFFFFFF"
                                                    To="#60FFFFFF" />

                                    <!--Rect5-->
                                    <ColorAnimation BeginTime="0:0:0.0"
                                                    Storyboard.TargetName="Rect5"
                                                    Duration="0:0:0.500"
                                                    Storyboard.TargetProperty="Fill.Color"
                                                    To="#00FFFFFF" />
                                    <ColorAnimation BeginTime="0:0:0.500"
                                                    Storyboard.TargetName="Rect5"
                                                    Duration="0:0:0.500"
                                                    Storyboard.TargetProperty="Fill.Color"
                                                    From="#FFFFFFFF"
                                                    To="#80FFFFFF" />

                                    <!--Rect6-->
                                    <ColorAnimation BeginTime="0:0:0.0"
                                                    Storyboard.TargetName="Rect6"
                                                    Duration="0:0:0.625"
                                                    Storyboard.TargetProperty="Fill.Color"
                                                    To="#00FFFFFF" />
                                    <ColorAnimation BeginTime="0:0:0.625"
                                                    Storyboard.TargetName="Rect6"
                                                    Duration="0:0:0.375"
                                                    Storyboard.TargetProperty="Fill.Color"
                                                    From="#FFFFFFFF"
                                                    To="#A0FFFFFF" />

                                    <!--Rect7-->
                                    <ColorAnimation BeginTime="0:0:0.0"
                                                    Storyboard.TargetName="Rect7"
                                                    Duration="0:0:0.750"
                                                    Storyboard.TargetProperty="Fill.Color"
                                                    To="#00FFFFFF" />
                                    <ColorAnimation BeginTime="0:0:0.750"
                                                    Storyboard.TargetName="Rect7"
                                                    Duration="0:0:0.250"
                                                    Storyboard.TargetProperty="Fill.Color"
                                                    From="#FFFFFFFF"
                                                    To="#C0FFFFFF" />

                                    <!--Rect8-->
                                    <ColorAnimation BeginTime="0:0:0.0"
                                                    Storyboard.TargetName="Rect8"
                                                    Duration="0:0:0.875"
                                                    Storyboard.TargetProperty="Fill.Color"
                                                    To="#00FFFFFF" />
                                    <ColorAnimation BeginTime="0:0:0.875"
                                                    Storyboard.TargetName="Rect8"
                                                    Duration="0:0:0.125"
                                                    Storyboard.TargetProperty="Fill.Color"
                                                    From="#FFFFFFFF"
                                                    To="#E0FFFFFF" />
                                </Storyboard>
                            </BeginStoryboard>
                        </EventTrigger>
                    </Grid.Triggers>
                    <Rectangle x:Name="Rect1"
                               Height="200"
                               Width="120"
                               Fill="#FFFFFFFF"
                               RadiusY="60"
                               RadiusX="60"
                               VerticalAlignment="Top"
                               d:IsLocked="True" />
                    <Rectangle x:Name="Rect2"
                               Height="200"
                               Width="120"
                               Fill="#20FFFFFF"
                               RadiusY="60"
                               RadiusX="60"
                               VerticalAlignment="Top"
                               d:LayoutOverrides="Width"
                               RenderTransformOrigin="0.5,2">
                        <Rectangle.RenderTransform>
                            <TransformGroup>
                                <ScaleTransform />
                                <SkewTransform />
                                <RotateTransform Angle="45" />
                                <TranslateTransform />
                            </TransformGroup>
                        </Rectangle.RenderTransform>
                    </Rectangle>

                    <Rectangle x:Name="Rect3"
                               Height="200"
                               Width="120"
                               Fill="#40FFFFFF"
                               RadiusY="60"
                               RadiusX="60"
                               VerticalAlignment="Top"
                               d:LayoutOverrides="Width"
                               RenderTransformOrigin="0.5,2">
                        <Rectangle.RenderTransform>
                            <TransformGroup>
                                <ScaleTransform />
                                <SkewTransform />
                                <RotateTransform Angle="90" />
                                <TranslateTransform />
                            </TransformGroup>
                        </Rectangle.RenderTransform>
                    </Rectangle>

                    <Rectangle x:Name="Rect4"
                               Height="200"
                               Width="120"
                               Fill="#60FFFFFF"
                               RadiusY="60"
                               RadiusX="60"
                               VerticalAlignment="Top"
                               d:LayoutOverrides="Width"
                               RenderTransformOrigin="0.5,2">
                        <Rectangle.RenderTransform>
                            <TransformGroup>
                                <ScaleTransform />
                                <SkewTransform />
                                <RotateTransform Angle="135" />
                                <TranslateTransform />
                            </TransformGroup>
                        </Rectangle.RenderTransform>
                    </Rectangle>

                    <Rectangle x:Name="Rect5"
                               Height="200"
                               Width="120"
                               Fill="#80FFFFFF"
                               RadiusY="60"
                               RadiusX="60"
                               VerticalAlignment="Top"
                               d:LayoutOverrides="Width"
                               RenderTransformOrigin="0.5,2">
                        <Rectangle.RenderTransform>
                            <TransformGroup>
                                <ScaleTransform />
                                <SkewTransform />
                                <RotateTransform Angle="180" />
                                <TranslateTransform />
                            </TransformGroup>
                        </Rectangle.RenderTransform>
                    </Rectangle>

                    <Rectangle x:Name="Rect6"
                               Height="200"
                               Width="120"
                               Fill="#A0FFFFFF"
                               RadiusY="60"
                               RadiusX="60"
                               VerticalAlignment="Top"
                               d:LayoutOverrides="Width"
                               RenderTransformOrigin="0.5,2">
                        <Rectangle.RenderTransform>
                            <TransformGroup>
                                <ScaleTransform />
                                <SkewTransform />
                                <RotateTransform Angle="225" />
                                <TranslateTransform />
                            </TransformGroup>
                        </Rectangle.RenderTransform>
                    </Rectangle>

                    <Rectangle x:Name="Rect7"
                               Height="200"
                               Width="120"
                               Fill="#C0FFFFFF"
                               RadiusY="60"
                               RadiusX="60"
                               VerticalAlignment="Top"
                               d:LayoutOverrides="Width"
                               RenderTransformOrigin="0.5,2">
                        <Rectangle.RenderTransform>
                            <TransformGroup>
                                <ScaleTransform />
                                <SkewTransform />
                                <RotateTransform Angle="270" />
                                <TranslateTransform />
                            </TransformGroup>
                        </Rectangle.RenderTransform>
                    </Rectangle>

                    <Rectangle x:Name="Rect8"
                               Height="200"
                               Width="120"
                               Fill="#E0FFFFFF"
                               RadiusY="60"
                               RadiusX="60"
                               VerticalAlignment="Top"
                               d:LayoutOverrides="Width"
                               RenderTransformOrigin="0.5,2">
                        <Rectangle.RenderTransform>
                            <TransformGroup>
                                <ScaleTransform />
                                <SkewTransform />
                                <RotateTransform Angle="315" />
                                <TranslateTransform />
                            </TransformGroup>
                        </Rectangle.RenderTransform>
                    </Rectangle>

                </Grid>
            </Viewbox>

5、还有一种样式

效果:

 <Grid x:Name="loading"
              Visibility="Visible"
              Height="41"
              Grid.Row="0"
              VerticalAlignment="Top"
              Margin="126,10,0,0"
              HorizontalAlignment="Left"
              Width="42">
            <Grid.Resources>
                <DrawingBrush x:Key="brush"
                              Stretch="None"
                              AlignmentX="Center"
                              AlignmentY="Top">
                    <DrawingBrush.Drawing>
                        <GeometryDrawing Brush="Black">
                            <GeometryDrawing.Geometry>
                                <EllipseGeometry RadiusX="2"
                                                 RadiusY="5" />
                            </GeometryDrawing.Geometry>
                        </GeometryDrawing>
                    </DrawingBrush.Drawing>
                </DrawingBrush>
            </Grid.Resources>

            <Grid.Triggers>
                <EventTrigger RoutedEvent="FrameworkElement.Loaded">
                    <BeginStoryboard>
                        <Storyboard RepeatBehavior="Forever">
                            <DoubleAnimation Storyboard.TargetName="r01"
                                             Storyboard.TargetProperty="Opacity"
                                             AutoReverse="True"
                                             Duration="0:0:0.08333"
                                             BeginTime="0:0:0.00000"
                                             To="0" />
                            <DoubleAnimation Storyboard.TargetName="r02"
                                             Storyboard.TargetProperty="Opacity"
                                             AutoReverse="True"
                                             Duration="0:0:0.08333"
                                             BeginTime="0:0:0.08333"
                                             To="0" />
                            <DoubleAnimation Storyboard.TargetName="r03"
                                             Storyboard.TargetProperty="Opacity"
                                             AutoReverse="True"
                                             Duration="0:0:0.08333"
                                             BeginTime="0:0:0.16666"
                                             To="0" />
                            <DoubleAnimation Storyboard.TargetName="r04"
                                             Storyboard.TargetProperty="Opacity"
                                             AutoReverse="True"
                                             Duration="0:0:0.08333"
                                             BeginTime="0:0:0.24999"
                                             To="0" />
                            <DoubleAnimation Storyboard.TargetName="r05"
                                             Storyboard.TargetProperty="Opacity"
                                             AutoReverse="True"
                                             Duration="0:0:0.08333"
                                             BeginTime="0:0:0.33332"
                                             To="0" />
                            <DoubleAnimation Storyboard.TargetName="r06"
                                             Storyboard.TargetProperty="Opacity"
                                             AutoReverse="True"
                                             Duration="0:0:0.08333"
                                             BeginTime="0:0:0.41665"
                                             To="0" />
                            <DoubleAnimation Storyboard.TargetName="r07"
                                             Storyboard.TargetProperty="Opacity"
                                             AutoReverse="True"
                                             Duration="0:0:0.08333"
                                             BeginTime="0:0:0.49998"
                                             To="0" />
                            <DoubleAnimation Storyboard.TargetName="r08"
                                             Storyboard.TargetProperty="Opacity"
                                             AutoReverse="True"
                                             Duration="0:0:0.08333"
                                             BeginTime="0:0:0.58331"
                                             To="0" />
                            <DoubleAnimation Storyboard.TargetName="r09"
                                             Storyboard.TargetProperty="Opacity"
                                             AutoReverse="True"
                                             Duration="0:0:0.08333"
                                             BeginTime="0:0:0.66664"
                                             To="0" />
                            <DoubleAnimation Storyboard.TargetName="r10"
                                             Storyboard.TargetProperty="Opacity"
                                             AutoReverse="True"
                                             Duration="0:0:0.08333"
                                             BeginTime="0:0:0.74997"
                                             To="0" />
                            <DoubleAnimation Storyboard.TargetName="r11"
                                             Storyboard.TargetProperty="Opacity"
                                             AutoReverse="True"
                                             Duration="0:0:0.08333"
                                             BeginTime="0:0:0.83330"
                                             To="0" />
                            <DoubleAnimation Storyboard.TargetName="r12"
                                             Storyboard.TargetProperty="Opacity"
                                             AutoReverse="True"
                                             Duration="0:0:0.08333"
                                             BeginTime="0:0:0.91663"
                                             To="0" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Grid.Triggers>

            <Rectangle x:Name="r01"
                       Fill="{StaticResource brush}"
                       Opacity="0.5"
                       RenderTransformOrigin="0.5,0.5">
                <Rectangle.RenderTransform>
                    <RotateTransform Angle="0" />
                </Rectangle.RenderTransform>
            </Rectangle>
            <Rectangle x:Name="r02"
                       Fill="{StaticResource brush}"
                       Opacity="0.5"
                       RenderTransformOrigin="0.5,0.5">
                <Rectangle.RenderTransform>
                    <RotateTransform Angle="30" />
                </Rectangle.RenderTransform>
            </Rectangle>
            <Rectangle x:Name="r03"
                       Fill="{StaticResource brush}"
                       Opacity="0.5"
                       RenderTransformOrigin="0.5,0.5">
                <Rectangle.RenderTransform>
                    <RotateTransform Angle="60" />
                </Rectangle.RenderTransform>
            </Rectangle>
            <Rectangle x:Name="r04"
                       Fill="{StaticResource brush}"
                       Opacity="0.5"
                       RenderTransformOrigin="0.5,0.5">
                <Rectangle.RenderTransform>
                    <RotateTransform Angle="90" />
                </Rectangle.RenderTransform>
            </Rectangle>
            <Rectangle x:Name="r05"
                       Fill="{StaticResource brush}"
                       Opacity="0.5"
                       RenderTransformOrigin="0.5,0.5">
                <Rectangle.RenderTransform>
                    <RotateTransform Angle="120" />
                </Rectangle.RenderTransform>
            </Rectangle>
            <Rectangle x:Name="r06"
                       Fill="{StaticResource brush}"
                       Opacity="0.5"
                       RenderTransformOrigin="0.5,0.5">
                <Rectangle.RenderTransform>
                    <RotateTransform Angle="150" />
                </Rectangle.RenderTransform>
            </Rectangle>
            <Rectangle x:Name="r07"
                       Fill="{StaticResource brush}"
                       Opacity="0.5"
                       RenderTransformOrigin="0.5,0.5">
                <Rectangle.RenderTransform>
                    <RotateTransform Angle="180" />
                </Rectangle.RenderTransform>
            </Rectangle>
            <Rectangle  x:Name="r08"
                        Fill="{StaticResource brush}"
                        Opacity="0.5"
                        RenderTransformOrigin="0.5,0.5">
                <Rectangle.RenderTransform>
                    <RotateTransform Angle="210" />
                </Rectangle.RenderTransform>
            </Rectangle>
            <Rectangle  x:Name="r09"
                        Fill="{StaticResource brush}"
                        Opacity="0.5"
                        RenderTransformOrigin="0.5,0.5">
                <Rectangle.RenderTransform>
                    <RotateTransform Angle="240" />
                </Rectangle.RenderTransform>
            </Rectangle>
            <Rectangle  x:Name="r10"
                        Fill="{StaticResource brush}"
                        Opacity="0.5"
                        RenderTransformOrigin="0.5,0.5">
                <Rectangle.RenderTransform>
                    <RotateTransform Angle="270" />
                </Rectangle.RenderTransform>
            </Rectangle>
            <Rectangle  x:Name="r11"
                        Fill="{StaticResource brush}"
                        Opacity="0.5"
                        RenderTransformOrigin="0.5,0.5">
                <Rectangle.RenderTransform>
                    <RotateTransform Angle="300" />
                </Rectangle.RenderTransform>
            </Rectangle>
            <Rectangle  x:Name="r12"
                        Fill="{StaticResource brush}"
                        Opacity="0.5"
                        RenderTransformOrigin="0.5,0.5">
                <Rectangle.RenderTransform>
                    <RotateTransform Angle="330" />
                </Rectangle.RenderTransform>
            </Rectangle>

        </Grid>

对应的后台

   BackgroundWorker bgMeet;

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            bgMeet = new BackgroundWorker();
            //能否报告进度更新
            bgMeet.WorkerReportsProgress = true;
            //要执行的后台任务
            bgMeet.DoWork += new DoWorkEventHandler(bgMeet_DoWork);
            //进度报告方法
            bgMeet.ProgressChanged += new ProgressChangedEventHandler(bgMeet_ProgressChanged);
            //后台任务执行完成时调用的方法
            bgMeet.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgMeet_RunWorkerCompleted);
            bgMeet.RunWorkerAsync(); //任务启动
        }
        //执行任务
        void bgMeet_DoWork(object sender, DoWorkEventArgs e)
        {
            //开始播放等待动画
            this.Dispatcher.Invoke(new Action(() =>
            {
                loading.Visibility = System.Windows.Visibility.Visible;
            }));
            //开始后台任务
            GetData();
        }
        //报告任务进度
        void bgMeet_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            this.Dispatcher.Invoke(new Action(() =>
            {
                this.lab_pro.Content = e.ProgressPercentage + "%";
            }));
        }
        //任务执行完成后更新状态
        void bgMeet_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            loading.Visibility = System.Windows.Visibility.Collapsed;
            this.Dispatcher.Invoke(new Action(() =>
            {
                this.lab_pro.Content = "完成";
            }));
        }
        //模拟耗时任务
        public void GetData()
        {
            for (int i = 0; i < 6; i++)
            {
                bgMeet.ReportProgress(20 * i);
                System.Threading.Thread.Sleep(400);
            }
        }

猜你喜欢

转载自blog.csdn.net/qq_43307934/article/details/86523882