WPF后台动画DoubleAnimation讲解
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讲解的更多相关文章
- WPF利用动画实现圆形进度条
原文:WPF利用动画实现圆形进度条 这是我的第一篇随笔,最近因为工作需要,开始学习WPF相关技术,自己想实现以下圆形进度条的效果,逛了园子发现基本都是很久以前的文章,实现方式一般都是GDI实现的,想到 ...
- WPF弹性模拟动画
原文:WPF弹性模拟动画 我们此次将要制作模拟物理中的弹性现象的交互动画,我们让一个小球向鼠标点击位置移动,这个移动的轨迹不是简单的位移,而是根据胡克定律计算得出的. 胡克定律:F=-kd F代表弹性 ...
- WPF控制动画开始、停止、暂停和恢复
1.闲言 好久也没更新一博客了,自己有点发懒,同时确实这几个月来也有点忙.风机监测软件,项目中,有这样一个小需求:正常风机在旋转的时候,上位机软要做一个风机的图片,让它不停地旋转,一但检测到下面风机停 ...
- WPF中的DoubleAnimation
原文:WPF中的DoubleAnimation WPF中的DoubleAnimation ...
- Wpf(Storyboard)动画简单实例
原文:Wpf(Storyboard)动画简单实例 动画的三种变换方式 RotateTransform:旋转变换变化值:CenterX围绕转的圆心横坐标 CenterY纵坐标 Angle旋转角度(角度正 ...
- WPF实现动画的几种方式及其小案例
WPF实现动画的方式: 基于计时器的动画 建立一个定时器,然后根据其频率循环调用函数或者一个事件处理函数,在这个函数中可以手工更新目标属性,直到达到最终值,这时可以停止计时器. 案例: 效果图: XA ...
- WPF之动画
原文:WPF之动画 线性关键帧.不连续关键帧动画: <Window.Triggers> <EventTrigger RoutedEvent="Window.Loaded&q ...
- C# WPF 时钟动画(2/2)
模拟实现时钟效果,学习WPF动画好例子,本文承接上文 C# WPF 时钟动画(1/2). 微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. C# ...
- WPF后台设置xaml控件的样式System.Windows.Style
WPF后台设置xaml控件的样式System.Windows.Style 摘-自 :感谢 作者: IT小兵 http://3w.suchso.com/projecteac-tual/wpf-zhi ...
随机推荐
- 为何在查询中索引未被使用 (Doc ID 1549181.1)
To Bottom * 为何在查询中索引未被使用 (Doc ID 1549181.1) To Bottom 文档内容 用途 排错步骤 高速检查 表上是否存在索引? 索引是否应该 ...
- Java随机验证吗
<span style="font-size:18px;">package com.java.process.jsp; import java.awt.Color; i ...
- C#的Timer(很多相关文章)
再C#里现在有3个Timer类: System.Windows.Forms.Timer System.Threading.Timer System.Timers.Timer 这三个Timer我想大家对 ...
- angular风格指南
原文 https://www.jianshu.com/p/1a0a0a74769a 大纲 综述 1.单一职责 2.命名 3.LIFT-D应用程序结构 4.组件 综述 以下说的准则是根据angular官 ...
- 简单的Java多线程的使用
前几天做一个功能.就是在前台更改信息后会自己主动发邮件给其它的人,相关信息已更改,刚開始是直接在更改信息代码后面增加发送邮件的代码,但发现这样会使界面特别慢,而慢的主要原因是因为发送邮件有时会耗时非常 ...
- phoenixframe平台连接socketserver,并接收返回值的演示样例
package org.phoenix.cases.webservice; import java.util.LinkedList; import org.phoenix.action.WebElem ...
- boost::any的一般使用方法
01.#include <iostream> 02.#include <list> 03.#include <boost/any.hpp> 04. ...
- JAVA生成二维码并转化为二进制在页面展示
引用jar包: zxing的core包,下载路径可参考:http://download.csdn.net/detail/sxg0205/9461106 java代码: 引用包: import java ...
- Android BlueDroid(一):BlueDroid概述
关键词:bluedroid bluez作者:xubin341719(欢迎转载,请注明作者,请尊重版权,谢谢!)欢迎指正错误.共同学习.共同进步!! 一.名词解释:(实用信息添加中--) BTI F: ...
- echarts改变颜色属性的demo
一:柱状图改变颜色 图片.png 代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8&qu ...