WPF旋转动态图效果演示

目的:旋转动态图效果。

做成了UserControl,使用很方便。

  •  UCWaitingProgress.xaml
<UserControl x:Class="WPF_WaitingProgress.UCWaitingProgress"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:WPF_WaitingProgress"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <UserControl.Resources>
        <Storyboard x:Key="waiting" Name="waiting">
            <DoubleAnimation Storyboard.TargetName="SpinnerRotate" Storyboard.TargetProperty="(RotateTransform.Angle)" From="0" To="359" Duration="0:0:02" RepeatBehavior="Forever" />
        </Storyboard>
    </UserControl.Resources>
    <Image Name="image" Source="loading.png" RenderTransformOrigin="0.5,0.5" Stretch="Uniform" Loaded="Image_Loaded">
        <Image.RenderTransform>
            <RotateTransform x:Name="SpinnerRotate" Angle="0" />
        </Image.RenderTransform>
    </Image>
</UserControl>
  • UCWaitingProgress.xaml.cs
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media.Animation;

namespace WPF_WaitingProgress
{
    /// <summary>
    /// UCWaitingProgress.xaml 的交互逻辑
    /// </summary>
    public partial class UCWaitingProgress : UserControl
    {
        private Storyboard storyboard;

        public UCWaitingProgress()
        {
            InitializeComponent();
            storyboard = (Resources["waiting"] as Storyboard);
        }

        private void Image_Loaded(object sender, RoutedEventArgs e)
        {
            Begin();
        }

        public void Begin()
        {
            Dispatcher.BeginInvoke(new Action(() =>
            {
                storyboard.Begin(image, true);
            }));
        }

        public void Stop()
        {
            Dispatcher.BeginInvoke(new Action(() =>
            {
                storyboard.Pause(image);
            }));
        }
    }
}
  • xaml代码
<Window x:Class="WPF_WaitingProgress.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WPF_WaitingProgress"
        mc:Ignorable="d"
        Title="MainWindow" Height="400" Width="400">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition Height="auto"/>
        </Grid.RowDefinitions>
        <local:UCWaitingProgress x:Name="waitingProgress" Height="100"/>
        <StackPanel Grid.Row="1" Orientation="Horizontal">
            <Button Content="Start" Margin="5" Click="Start_Click"/>
            <Button Content="Stop" Margin="5" Click="Stop_Click"/>
        </StackPanel>
    </Grid>
</Window>
  • 后台代码
using System.Windows;

namespace WPF_WaitingProgress
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Start_Click(object sender, RoutedEventArgs e)
        {
            waitingProgress.Begin();
        }

        private void Stop_Click(object sender, RoutedEventArgs e)
        {
            waitingProgress.Stop();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/u012366767/article/details/81509744