目的:旋转动态图效果。
做成了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();
}
}
}