WPF全局动画控制

WPF写的全局动画控制,鼠标移上去会改变Ellipse的颜色,可以用checkbox取消动画显示。

效果如图:

WPF全局动画控制

1.新建wpf项目,新建一个文件夹,命名为:Res,在里面添加两个资源字典,分别命名为:Dictionary1.xaml和Dictionary2.xaml;

2.添加一个wpf窗体,命名为:MainWindow;

WPF全局动画控制

3.Dictionary2.xaml代码:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
	<Storyboard x:Key="Storyboard1">
		<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)" Storyboard.TargetName="rectangle">
			<EasingColorKeyFrame KeyTime="0:0:0.5" Value="Yellow"/>
		</ColorAnimationUsingKeyFrames>
	</Storyboard>
	<Storyboard x:Key="Storyboard2">
		<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)" Storyboard.TargetName="rectangle">
			<EasingColorKeyFrame KeyTime="0" Value="Yellow"/>
			<EasingColorKeyFrame KeyTime="0:0:0.5" Value="Red"/>
		</ColorAnimationUsingKeyFrames>
	</Storyboard>
</ResourceDictionary>

4.Dictionary1.xaml代码:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
	<Storyboard x:Key="Storyboard1">
	</Storyboard>
	<Storyboard x:Key="Storyboard2">
	</Storyboard>
</ResourceDictionary>

5.App.xaml.cs代码:

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Windows;

namespace WPF动画控制 {
	/// <summary>
	/// App.xaml 的交互逻辑
	/// </summary>
	public partial class App : Application {

		protected override void OnStartup(StartupEventArgs e) 
        {
			base.OnStartup(e);
			App.LoadResources(true);
		}

		public static void LoadResources(bool allowStoryboard) 
        {
            string resFilename = "/Res/" + (allowStoryboard ? "Dictionary2.xaml" : "Dictionary1.xaml");
			ResourceDictionary resDic = new ResourceDictionary {Source = new Uri(resFilename, UriKind.Relative)};
			Application.Current.Resources.MergedDictionaries.Clear();
			Application.Current.Resources.MergedDictionaries.Add(resDic);
		}
	}
}

6.MainWindow.xaml代码:

<Window 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" 
        mc:Ignorable="d" 
        x:Class="WPF动画控制.MainWindow"
        Title="MainWindow" Height="196" Width="257">
    <Window.Resources>
    </Window.Resources>
    <Window.Triggers>
        <EventTrigger RoutedEvent="Mouse.MouseEnter" SourceName="rectangle">
            <BeginStoryboard Storyboard="{DynamicResource Storyboard1}"/>
        </EventTrigger>
        <EventTrigger RoutedEvent="Mouse.MouseLeave" SourceName="rectangle">
            <BeginStoryboard Storyboard="{DynamicResource Storyboard2}"/>
        </EventTrigger>
    </Window.Triggers>
    <Grid>
        <Ellipse x:Name="rectangle" HorizontalAlignment="Left" Margin="10,31,0,0" Stroke="Black" Width="117" Fill="#FFFF2800" Height="110" VerticalAlignment="Top" />
        <CheckBox Content="动画效果" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" IsChecked="True" Width="80" Click="CheckBox_Click" RenderTransformOrigin="0.338,0.75" />
    </Grid>
</Window>

7.MainWindow.xaml.cs代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

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

		private void CheckBox_Click(object sender, RoutedEventArgs e) {
			CheckBox checkBox=sender as CheckBox;
			App.LoadResources(checkBox.IsChecked.Value);
		}

	}
}
代码下载地址


WPF全局动画控制

上一篇:Hive 高级编程——深入浅出学Hive


下一篇:【实战虚拟化】安全设计之一基本架构