WPF后台动画,使用DoubleAnimation做的。

1.移动动画

需要参数(目标点离最上边的位置,目标点离最左边的位置,元素名称)

Image mImage = new Image();

FloatInElement(100,100,mImage);

 /// <summary>
/// 移动动画
/// </summary>
/// <param name="top">目标点相对于上端的位置</param>
/// <param name="left">目标点相对于左端的位置</param>
/// <param name="elem">移动元素</param>
public static void FloatInElement(double top, double left, UIElement elem)
{
try
{
DoubleAnimation floatY = new DoubleAnimation()
{
To = TransValueFromHeight(top),
Duration = new TimeSpan(, , , , ),
};
DoubleAnimation floatX = new DoubleAnimation()
{
To = TransValueFromWidth(left),
Duration = new TimeSpan(, , , , ),
}; elem.BeginAnimation(Canvas.TopProperty, floatY);
elem.BeginAnimation(Canvas.LeftProperty, floatX);
}
catch (Exception)
{ throw;
}
}

2.透明度动画

需要参数(元素名称,需要到达的透明度)

Image mImage = new Image();

FloatInElement(mImage,0);

 /// <summary>
/// 透明度动画
/// </summary>
/// <param name="elem"></param>
/// <param name="to"></param>
public static void FloatElement(UIElement elem, double to)
{
lock (elem)
{
if (to == )
{
elem.Visibility = Visibility.Visible;
}
DoubleAnimation opacity = new DoubleAnimation()
{
To = to,
Duration = new TimeSpan(, , , , )
};
EventHandler handler = null;
opacity.Completed += handler = (s, e) =>
{
opacity.Completed -= handler;
if (to == )
{
elem.Visibility = Visibility.Collapsed;
}
opacity = null;
};
elem.BeginAnimation(UIElement.OpacityProperty, opacity);
}
}

3.缓动动画-缩放动画

需要参数(控件名称,元素开始的位置,开始大小,目标大小)

Image mImage = new Image();

ScaleEasingAnimationShow(mImage,new Point(0.5,0.5),1,0);

元素开始的位置是从new Point(0,0)到new Point(1,1),左上角为(0,0)、右下角为(1,1),控件大小范围为(1,0) 1为控件本身大小,0 为控件缩放完,不显示。

如果要改动画类型,则改EasingMode = EasingMode.EaseOut

 /// <summary>
/// 用户控件是的动画
/// </summary>
/// <param name="element">控件名</param>
/// <param name="point">元素开始动画的位置</param>
/// <param name="from">元素开始的大小</param>
/// <param name="from">元素到达的大小</param>
public static void ScaleEasingAnimationShow(FrameworkElement element, Point point, double from, double to)
{
lock (element)
{
ScaleTransform scale = new ScaleTransform();
element.RenderTransform = scale;
element.RenderTransformOrigin = point;//定义圆心位置
EasingFunctionBase easeFunction = new PowerEase()
{
EasingMode = EasingMode.EaseOut,
Power =
};
DoubleAnimation scaleAnimation = new DoubleAnimation()
{
From = from, //起始值
To = to, //结束值
EasingFunction = easeFunction, //缓动函数
Duration = new TimeSpan(, , , , ) //动画播放时间
};
AnimationClock clock = scaleAnimation.CreateClock();
scale.ApplyAnimationClock(ScaleTransform.ScaleXProperty, clock);
scale.ApplyAnimationClock(ScaleTransform.ScaleYProperty, clock);
}
}

WPF后台动画DoubleAnimation讲解的更多相关文章

  1. WPF利用动画实现圆形进度条

    原文:WPF利用动画实现圆形进度条 这是我的第一篇随笔,最近因为工作需要,开始学习WPF相关技术,自己想实现以下圆形进度条的效果,逛了园子发现基本都是很久以前的文章,实现方式一般都是GDI实现的,想到 ...

  2. WPF弹性模拟动画

    原文:WPF弹性模拟动画 我们此次将要制作模拟物理中的弹性现象的交互动画,我们让一个小球向鼠标点击位置移动,这个移动的轨迹不是简单的位移,而是根据胡克定律计算得出的. 胡克定律:F=-kd F代表弹性 ...

  3. WPF控制动画开始、停止、暂停和恢复

    1.闲言 好久也没更新一博客了,自己有点发懒,同时确实这几个月来也有点忙.风机监测软件,项目中,有这样一个小需求:正常风机在旋转的时候,上位机软要做一个风机的图片,让它不停地旋转,一但检测到下面风机停 ...

  4. WPF中的DoubleAnimation

    原文:WPF中的DoubleAnimation WPF中的DoubleAnimation                                                         ...

  5. Wpf(Storyboard)动画简单实例

    原文:Wpf(Storyboard)动画简单实例 动画的三种变换方式 RotateTransform:旋转变换变化值:CenterX围绕转的圆心横坐标 CenterY纵坐标 Angle旋转角度(角度正 ...

  6. WPF实现动画的几种方式及其小案例

    WPF实现动画的方式: 基于计时器的动画 建立一个定时器,然后根据其频率循环调用函数或者一个事件处理函数,在这个函数中可以手工更新目标属性,直到达到最终值,这时可以停止计时器. 案例: 效果图: XA ...

  7. WPF之动画

    原文:WPF之动画 线性关键帧.不连续关键帧动画: <Window.Triggers> <EventTrigger RoutedEvent="Window.Loaded&q ...

  8. C# WPF 时钟动画(2/2)

    模拟实现时钟效果,学习WPF动画好例子,本文承接上文 C# WPF 时钟动画(1/2). 微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. C# ...

  9. WPF后台设置xaml控件的样式System.Windows.Style

    WPF后台设置xaml控件的样式System.Windows.Style 摘-自 :感谢 作者: IT小兵   http://3w.suchso.com/projecteac-tual/wpf-zhi ...

随机推荐

  1. swift学习第十二天:类的属性定义

    类的属性介绍 Swift中类的属性有多种 存储属性:存储实例的常量和变量 计算属性:通过某种方式计算出来的属性 类属性:与整个类自身相关的属性 存储属性 存储属性是最简单的属性,它作为类实例的一部分, ...

  2. swift 旋转加载动画

    https://github.com/naoyashiga/RPLoadingAnimation

  3. 【37.38%】【codeforces 722C】Destroying Array

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  4. Eclipse 快捷键大全 分类: C_OHTERS 2014-06-01 13:05 332人阅读 评论(0) 收藏

      精选常用: 1.  ctrl+shift+r:打开资源 这可能是所有快捷键组合中最省时间的了.这组快捷键可以让你打开你的工作区中任何一个文件,而你只需要按下文件名或mask名中的前几个字母,比如a ...

  5. [内核编程] 键盘过滤第一个例子ctrl2cap(4.1~4.4)汇总,测试

    键盘过滤第一个例子ctrl2cap(4.1~4.4)汇总,测试 完整源代码 /// /// @file ctrl2cap.c /// @author wowocock /// @date 2009-1 ...

  6. C#生成6位随机验证码

    private string VerifyCode() { Random random = new Random(); , ).ToString(); }

  7. [Compose] 10. Capture Side Effects in a Task

    We examine the data structure Task, see some constructors, familiar methods, and finally how it capt ...

  8. Java编程思想第四版 *第五章 个人练习

    练习3:(1)创建一个带默认构造器(即无參构造器)的类.在构造器中打印一条消息.为这个类创建一个对象.P116 public class Test{ public Test(){ System.out ...

  9. [Angular] Ngrx/effects, Action trigger another action

    @Injectable() export class LoadUserThreadsEffectService { constructor(private action$: Actions, priv ...

  10. MVC4中AJAX Html页面打开调用后台方法实现动态载入数据库中的数据

    之前一直用window.onload方法来调用js方法来实现,今天纠结能不能换个方法实现. 非常明显是能够的. 在html前台页面引用js代码例如以下 @Scripts.Render("~/ ...