WPF 各种基础动画实现
C#
- 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.Animation;
- using System.Windows.Media.Imaging;
- using System.Windows.Navigation;
- using System.Windows.Shapes;
- namespace AnimationTest
- {
- /// <summary>
- /// MainWindow.xaml 的交互逻辑
- /// </summary>
- public partial class MainWindow : Window
- {
- public MainWindow()
- {
- InitializeComponent();
- DoubleAnimation a = new DoubleAnimation();//定义
- a.RepeatBehavior = new RepeatBehavior();//重复次数,延迟不重复
- //a.RepeatBehavior = new RepeatBehavior(TimeSpan.Parse("0:0:15"));//整个动画持续时间,中途停止动画
- //a.RepeatBehavior = RepeatBehavior.Forever;//无限重复
- a.BeginTime=TimeSpan.Parse("0:0:1");//延迟开始时间
- //a.SpeedRatio = 2;//动画速度快2倍,影响TimeSpan.Parse
- //a.AccelerationRatio = 0.33;//加速阶段从时间百分比0%到33%
- //a.DecelerationRatio = 0.33;//减速阶段从时间百分比100%-33%到100%;
- //a.IsCumulative = true;//仅与RepeatBehavior一起使用在a.By下50-150-50跳150-200-150
- //a.IsAdditive = true;//获取属性默认值,从默认值开始动画
- //a.FillBehavior = FillBehavior.Stop;//动画完之后恢复原始值
- //a.From = 50;//起始,若默认值不是50则跳到50在进行动画
- a.AutoReverse = true;//往返
- //a.To = 100;
- a.By = ;//等于a.To = 100 + a.Form;
- a.Duration = new Duration(TimeSpan.Parse("0:0:5"));//花费时间
- b.BeginAnimation(Button.WidthProperty,a);//调用开始
- }
- }
- }
XMAL
- <Window x:Class="AnimationTest.MainWindow"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- Title="MainWindow" Height="" Width="">
- <Window.Resources>
- <Style x:Key="bt1" TargetType="{x:Type Button}">
- <Setter Property="Background" Value="Yellow"/>
- <Style.Triggers>
- <EventTrigger RoutedEvent="Button.Click">
- <EventTrigger.Actions>
- <BeginStoryboard>
- <Storyboard TargetProperty="Width">
- <DoubleAnimation To="" Duration="0:0:5" AutoReverse="True" IsAdditive="True"/>
- </Storyboard>
- </BeginStoryboard>
- </EventTrigger.Actions>
- </EventTrigger>
- </Style.Triggers>
- </Style>
- </Window.Resources>
- <Grid>
- <Canvas Margin="12,12,359,187">
- <Button x:Name="b" Width="">
- CS
- </Button>
- <Button Canvas.Top="" Width="" Style="{StaticResource ResourceKey=bt1}">
- XAML
- </Button>
- <Button Canvas.Top="">
- Color
- <Button.Background>
- <LinearGradientBrush>
- <GradientStop Color="Blue" Offset=""/>
- <GradientStop Color="Black" Offset="0.5"/>
- <GradientStop Color="Blue" Offset=""/>
- </LinearGradientBrush>
- </Button.Background>
- <Button.Triggers>
- <EventTrigger RoutedEvent="Button.Loaded">
- <EventTrigger.Actions>
- <BeginStoryboard>
- <Storyboard >
- <ColorAnimation From="Black" To="White" Duration="0:0:2" AutoReverse="True"
- Storyboard.TargetProperty="Background.GradientStops[1].Color"
- RepeatBehavior="Forever"/>
- <DoubleAnimation From="" To="" Duration="0:0:2" AutoReverse="True"
- Storyboard.TargetProperty="Background.GradientStops[1].Offset"
- RepeatBehavior="Forever"/>
- </Storyboard>
- </BeginStoryboard>
- </EventTrigger.Actions>
- </EventTrigger>
- </Button.Triggers>
- </Button>
- <Button Canvas.Top="" Canvas.Left="">
- Color
- <Button.Background>
- <LinearGradientBrush>
- <GradientStop Color="Blue" Offset=""/>
- <GradientStop Color="White" Offset="0.5"/>
- <GradientStop Color="Blue" Offset=""/>
- </LinearGradientBrush>
- </Button.Background>
- <Button.Triggers>
- <EventTrigger RoutedEvent="Button.Loaded">
- <EventTrigger.Actions>
- <BeginStoryboard>
- <Storyboard>
- <DoubleAnimation From="" To="" Duration="0:0:2" AutoReverse="True"
- Storyboard.TargetProperty="Background.GradientStops[1].Offset"
- RepeatBehavior="Forever"/>
- </Storyboard>
- </BeginStoryboard>
- </EventTrigger.Actions>
- </EventTrigger>
- </Button.Triggers>
- </Button>
- </Canvas>
- <Canvas Margin="161,12,114,174">
- <Canvas.Triggers>
- <EventTrigger RoutedEvent="Canvas.Loaded">
- <BeginStoryboard>
- <Storyboard TargetName="p2" TargetProperty="Opacity">
- <DoubleAnimation From="" To="" AutoReverse="True" RepeatBehavior="Forever" Duration="0:0:5"/>
- </Storyboard>
- </BeginStoryboard>
- </EventTrigger>
- </Canvas.Triggers>
- <Image Name="p1" Source="/AnimationTest;component/Images/p1.bmp" />
- <Image Name="p2" Source="/AnimationTest;component/Images/p2.bmp" />
- </Canvas>
- <Canvas Margin="400,12,12,264" Background="Black" TextBlock.Foreground="White" TextBlock.FontSize="">
- <Canvas.Triggers>
- <EventTrigger RoutedEvent="Canvas.Loaded">
- <BeginStoryboard>
- <Storyboard TargetProperty="Opacity" RepeatBehavior="Forever">
- <DoubleAnimation Storyboard.TargetName="title1" BeginTime="0:0:2"
- From="" To="" Duration="0:0:2" AutoReverse="True"/>
- <DoubleAnimation Storyboard.TargetName="title2" BeginTime="0:0:6"
- From="" To="" Duration="0:0:2" AutoReverse="True"/>
- <DoubleAnimation Storyboard.TargetName="title3" BeginTime="0:0:10"
- From="" To="" Duration="0:0:2" AutoReverse="True"/>
- <DoubleAnimation Storyboard.TargetName="title4" BeginTime="0:0:14"
- From="" To="" Duration="0:0:2" AutoReverse="True"/>
- <DoubleAnimation Storyboard.TargetName="title5" BeginTime="0:0:18"
- From="" To="" Duration="0:0:2" AutoReverse="True"/>
- </Storyboard>
- </BeginStoryboard>
- </EventTrigger>
- </Canvas.Triggers>
- <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Opacity="" Name="title1">title1</TextBlock>
- <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Opacity="" Name="title2">title2</TextBlock>
- <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Opacity="" Name="title3">title3</TextBlock>
- <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Opacity="" Name="title4">title4</TextBlock>
- <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Opacity="" Name="title5">title5</TextBlock>
- </Canvas>
- <Canvas Margin="0,144,12,89" Background="Black">
- <Image Source="/AnimationTest;component/Images/1.bmp" Height="" Width="">
- <Image.Triggers>
- <EventTrigger RoutedEvent="Image.Loaded">
- <EventTrigger.Actions>
- <BeginStoryboard>
- <Storyboard>
- <DoubleAnimation Storyboard.TargetProperty="(Canvas.Left)"
- From="" To="" Duration="0:0:9" RepeatBehavior="Forever" AutoReverse="True"/>
- <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Canvas.Top)"
- Duration="0:0:9" RepeatBehavior="Forever" AutoReverse="True">
- <LinearDoubleKeyFrame Value="" KeyTime="0:0:0"/>
- <LinearDoubleKeyFrame Value="" KeyTime="0:0:1"/>
- <LinearDoubleKeyFrame Value="" KeyTime="0:0:2"/>
- <LinearDoubleKeyFrame Value="" KeyTime="0:0:3"/>
- <SplineDoubleKeyFrame Value="" KeySpline="0,1 1,0" KeyTime="0:0:4"/>
- <SplineDoubleKeyFrame Value="" KeySpline="0,1 1,0" KeyTime="0:0:5"/>
- <SplineDoubleKeyFrame Value="" KeySpline="0,1 1,0" KeyTime="0:0:6"/>
- <DiscreteDoubleKeyFrame Value="" KeyTime="0:0:7"/>
- <DiscreteDoubleKeyFrame Value="" KeyTime="0:0:8"/>
- <DiscreteDoubleKeyFrame Value="" KeyTime="0:0:9"/>
- <!--KeyTime省略则匀速动画,也可以用百分比设值、Paced速率-->
- </DoubleAnimationUsingKeyFrames>
- </Storyboard>
- </BeginStoryboard>
- </EventTrigger.Actions>
- </EventTrigger>
- </Image.Triggers>
- </Image>
- </Canvas>
- <Canvas Margin="400,67,66,223" Background="Black" TextBlock.Foreground="White">
- <TextBlock Width="" Height="" Text="play">
- <TextBlock.Triggers>
- <EventTrigger RoutedEvent="Loaded">
- <EventTrigger.Actions>
- <BeginStoryboard>
- <Storyboard>
- <StringAnimationUsingKeyFrames Storyboard.TargetProperty="Text" Duration="0:0:5" RepeatBehavior="Forever" AutoReverse="True">
- <DiscreteStringKeyFrame Value="play"/>
- <DiscreteStringKeyFrame Value="Play"/>
- <DiscreteStringKeyFrame Value="PLay"/>
- <DiscreteStringKeyFrame Value="PLAy"/>
- <DiscreteStringKeyFrame Value="PLAY"/>
- <DiscreteStringKeyFrame Value="PLAY"/>
- </StringAnimationUsingKeyFrames>
- </Storyboard>
- </BeginStoryboard>
- </EventTrigger.Actions>
- </EventTrigger>
- </TextBlock.Triggers>
- </TextBlock>
- </Canvas>
- </Grid>
- </Window>
源自《WPF 揭秘》一书
WPF 各种基础动画实现的更多相关文章
- WPF 画线动画效果实现
原文:WPF 画线动画效果实现 弄了将近三天才搞定的,真是艰辛的实现. 看了很多博客,都太高深了,而且想要实现的功能都太强大了,结果基础部分一直实现不了,郁闷啊~ 千辛万苦终于找到了一个Demo,打开 ...
- iOS开发UI篇—核心动画(基础动画)
转自:http://www.cnblogs.com/wendingding/p/3801157.html 文顶顶 最怕你一生碌碌无为 还安慰自己平凡可贵 iOS开发UI篇—核心动画(基础动画) iOS ...
- WPF中的动画——(三)时间线(TimeLine)
WPF中的动画——(三)时间线(TimeLine) 时间线(TimeLine)表示时间段. 它提供的属性可以让控制该时间段的长度.开始时间.重复次数.该时间段内时间进度的快慢等等.在WPF中内置了如下 ...
- HT for Web基础动画介绍
在上一篇<基于HT for Web矢量实现3D叶轮旋转>一文中,我略微提了下HT for Web基础动画的相关用法,但是讲得不深入,今天就来和大家分享下HT for Web基础动画的相关介 ...
- 核心动画基础动画(CABasicAnimation)关键帧动画
1.在iOS中核心动画分为几类: 基础动画(CABasicAnimation) 关键帧动画(CAKeyframeAnimation) 动画组(CAAnimationGroup) 转场动画(CATran ...
- WPF编程学习——动画
前言 使用动画,是增强用户体验的一种有效的手段.合理的动画,可以让应用程序的界面看起来更加自然.真实.流畅.舒适,更有效地向用户展现信息,用户也更容易接受.同时也增加了软件使用的乐趣,提高用户粘度.( ...
- Core Animation中的基础动画
基础动画 在开发过程中很多情况下通过基础动画就可以满足开发需求,前面例子中使用的UIView代码块进行图像放大缩小的演示动画也是基础动画(在iOS7 中UIView也对关键帧动画进行了封装),只是UI ...
- jQuery里面的常用的事件和基础动画的实现
一:了解jquery里面常用的事件 二:了解基础动画的实现 1:加载DOM 在JavaScript中使用window.onload事件作为窗体加载事件(它在页面所有数据加载完成之后才会执行) 在jQu ...
- Core Animation 动画的使用:关键帧动画、基础动画、动画组
首先让我们了解下什么是 Core Animation,Core Animation 为核心动画,他为图形渲染和动画提供了基础.使用核心动画,我们只需要设置起点.终点.关键帧等一些参数,剩下的工作核心动 ...
随机推荐
- Lucene.Net 2.3.1开发介绍 —— 三、索引(四)
原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(四) 4.索引对搜索排序的影响 搜索的时候,同一个搜索关键字和同一份索引,决定了一个结果,不但决定了结果的集合,也确定了结果的顺序.那个 ...
- C#多线程实现方法——Task/Task.Factary
原文:C#多线程实现方法--Task/Task.Factary Task 使用 Task以及Task.Factory都是在.Net 4引用的.Task跟Thread很类似,通过下面例子可以看到. st ...
- http调试工具Charles Proxy用法详解
Charles Proxy 通常称为Charles,Charles是目前最强大的http调试工具,在界面和功能上远强于Fiddler,同时是全平台支持,堪称圣杯级工具,不过在这里为您提供了Charle ...
- HDU 3571 N-dimensional Sphere(高斯消元 数论题)
这道题算是比较综合的了,要用到扩展欧几里得,乘法二分,高斯消元. 看了题解才做出来orz 基本思路是这样,建一个n*(n-1)的行列式,然后高斯消元. 关键就是在建行列式时会暴long long,所以 ...
- 基于libevent, libuv和android Looper不断演进socket编程 - 走向架构师之路 - 博客频道 - CSDN.NET
基于libevent, libuv和android Looper不断演进socket编程 - 走向架构师之路 - 博客频道 - CSDN.NET 基于libevent, libuv和android L ...
- linux使用进阶(一)
本文依据<应该知道的Linux技巧>coolshell上的一篇文章提到的Linux技巧,结合自己掌握的情况进行扩展和总结得来.主要包含下面内容: 一.日常操作 二.数据处理 ...
- sql server数据库保存图片或者其他小文件
原文:sql server数据库保存图片或者其他小文件 测试用sql server数据库保存图片或者其他小文件. 文件流字段用varbinary类型. static void Main() { App ...
- selenium2支持无界面操作(HtmlUnit和PhantomJs)
selenium2支持无界面操作(HtmlUnit和PhantomJs) selenium2支持通过各种driver(FirfoxDriver,IternetExplorerDriver,OperaD ...
- hdu3605(最大流+状态压缩)
传送门:Escape 题意:给出每个人适合住的星球信息和该星球能住多少人 ,第一行给出n m 代表有 n 个人 m 个星球,然后接下来n行每行m个数字 1代表适合第 i 个星球 0 代表不适合第 i ...
- [置顶] Guava学习之Immutable集合
Immutable中文意思就是不可变.那为什么需要构建一个不可变的对象?原因有以下几点: 在并发程序中,使用Immutable既保证线程安全性,也大大增强了并发时的效率(跟并发锁方式相比).尤其当一个 ...