Silverlight 动画类的使用(转)
时间:2011-01-08 来源:slwf7man
步骤1:定义动画类
步骤2:定义静态类(添加扩展动画属性,扩展动画方法)
步骤3:首先定义几个动画,这里使用静态类,看情况自己定,这样就可以实现,动画一次定义,多次使用,不同的多上都可以复用这个定义好的对象。
步骤4:具体的使用
步骤1:AnimationSL.cs
/// <summary>
/// 定义动画类
/// </summary>
#region 动画类
public class AnimationSL
{
#region 注释信息
//RenderTransformOrigin:中心点
//ScaleTransform:将一个对象在水平或垂直方向进行放大或小。缩
//SkewTransform:将一个对象相对于X轴或Y轴进行倾斜
//RotateTransform:将一个对象旋转特定的角度。
//TranslateTransform:将一个对象在水平或垂直方向进行移动。
#endregion
public delegate void CompletedEvent(FrameworkElement UI, object sender, EventArgs e);
public event CompletedEvent Completed;
#region 实例
/// <summary>
/// 实例
/// </summary>
public AnimationSL()
{
Initialize();
}
/// <summary>
/// 实例
/// </summary>
/// <param name="UI_"></param>
public AnimationSL(FrameworkElement UI_)
{
UI = UI_;
Initialize();
}
/// <summary>
/// 初始化
/// </summary>
private void Initialize()
{
RenderTransformOrigin = new _RenderTransformOriginClass(this);
ScaleTransform = new _ScaleTransformClass(this);
SkewTransform = new _SkewTransformClass(this);
RotateTransform = new _RotateTransformClass(this);
TranslateTransform = new _TranslateTransformClass(this);
DropShadowEffect = new _DropShadowEffectClass(this);
CompositeTransform = new _CompositeTransformClass(this);
}
#endregion
#region 声明动画
private String _Name = "";
/// <summary>
/// 动画名字
/// </summary>
public String Name
{
get { return _Name; }
set { _Name = value; }
}
private FrameworkElement _UI = null;
/// <summary>
/// 动画对象
/// </summary>
public FrameworkElement UI
{
get { return _UI; }
set { _UI = value; }
}
private Storyboard _Storyboard = new Storyboard();
/// <summary>
/// 动画处理
/// </summary>
private System.Windows.Media.TransformGroup _TransformGroup = new System.Windows.Media.TransformGroup();
/// <summary>
/// 2D缩放处理
/// </summary>
private System.Windows.Media.ScaleTransform _ScaleTransform = new System.Windows.Media.ScaleTransform();
/// <summary>
/// 2D扭曲处理
/// </summary>
private System.Windows.Media.SkewTransform _SkewTransform = new System.Windows.Media.SkewTransform();
/// <summary>
/// 2D旋转处理
/// </summary>
private System.Windows.Media.RotateTransform _RotateTransform = new System.Windows.Media.RotateTransform();
/// <summary>
/// 2D移动处理
/// </summary>
private System.Windows.Media.TranslateTransform _TranslateTransform = new System.Windows.Media.TranslateTransform();
/// <summary>
/// 翻转处理
/// </summary>
private System.Windows.Media.CompositeTransform _CompositeTransform = new System.Windows.Media.CompositeTransform();
#endregion
#region 声明动画处理
private PointAnimationUsingKeyFrames _PA_RenderTransformOrigin = new PointAnimationUsingKeyFrames();
/// <summary>
/// 中心点
/// </summary>
public PointAnimationUsingKeyFrames PA_RenderTransformOrigin
{
get { return _PA_RenderTransformOrigin; }
set { _PA_RenderTransformOrigin = value; }
}
private DoubleAnimationUsingKeyFrames _DA_ScaleTransform_X = new DoubleAnimationUsingKeyFrames();
/// <summary>
/// 将一个对象在水平或垂直方向进行放大或缩小(X轴)
/// </summary>
public DoubleAnimationUsingKeyFrames DA_ScaleTransform_X
{
get { return _DA_ScaleTransform_X; }
set { _DA_ScaleTransform_X = value; }
}
private DoubleAnimationUsingKeyFrames _DA_ScaleTransform_Y = new DoubleAnimationUsingKeyFrames();
/// <summary>
/// 将一个对象在水平或垂直方向进行放大或缩小(Y轴)
/// </summary>
public DoubleAnimationUsingKeyFrames DA_ScaleTransform_Y
{
get { return _DA_ScaleTransform_Y; }
set { _DA_ScaleTransform_Y = value; }
}
private DoubleAnimationUsingKeyFrames _DA_SkewTransform_X = new DoubleAnimationUsingKeyFrames();
/// <summary>
/// 将一个对象相对于X轴或Y轴进行倾斜(X轴)
/// </summary>
public DoubleAnimationUsingKeyFrames DA_SkewTransform_X
{
get { return _DA_SkewTransform_X; }
set { _DA_SkewTransform_X = value; }
}
private DoubleAnimationUsingKeyFrames _DA_SkewTransform_Y = new DoubleAnimationUsingKeyFrames();
/// <summary>
/// 将一个对象相对于X轴或Y轴进行倾斜(Y轴)
/// </summary>
public DoubleAnimationUsingKeyFrames DA_SkewTransform_Y
{
get { return _DA_SkewTransform_Y; }
set { _DA_SkewTransform_Y = value; }
}
private DoubleAnimationUsingKeyFrames _DA_RotateTransform = new DoubleAnimationUsingKeyFrames();
/// <summary>
/// 将一个对象旋转特定的角度
/// </summary>
public DoubleAnimationUsingKeyFrames DA_RotateTransform
{
get { return _DA_RotateTransform; }
set { _DA_RotateTransform = value; }
}
private DoubleAnimationUsingKeyFrames _DA_TranslateTransform_X = new DoubleAnimationUsingKeyFrames();
/// <summary>
/// 将一个对象在水平或垂直方向进行移动(X轴)
/// </summary>
public DoubleAnimationUsingKeyFrames DA_TranslateTransform_X
{
get { return _DA_TranslateTransform_X; }
set { _DA_TranslateTransform_X = value; }
}
private DoubleAnimationUsingKeyFrames _DA_TranslateTransform_Y = new DoubleAnimationUsingKeyFrames();
/// <summary>
/// 将一个对象在水平或垂直方向进行移动(Y轴)
/// </summary>
public DoubleAnimationUsingKeyFrames DA_TranslateTransform_Y
{
get { return _DA_TranslateTransform_Y; }
set { _DA_TranslateTransform_Y = value; }
}
private DoubleAnimationUsingKeyFrames _DA_CompositeTransform_X = new DoubleAnimationUsingKeyFrames();
/// <summary>
/// 将一个对象翻转(X轴)
/// </summary>
public DoubleAnimationUsingKeyFrames DA_CompositeTransform_X
{
get { return _DA_CompositeTransform_X; }
set { _DA_CompositeTransform_X = value; }
}
private DoubleAnimationUsingKeyFrames _DA_CompositeTransform_Y = new DoubleAnimationUsingKeyFrames();
/// <summary>
/// 将一个对象翻转(Y轴)
/// </summary>
public DoubleAnimationUsingKeyFrames DA_CompositeTransform_Y
{
get { return _DA_CompositeTransform_Y; }
set { _DA_CompositeTransform_Y = value; }
}
#endregion
#region 声明投影效果
//投影效果
#endregion
#region 鼠标进入置于最上层
private int _ZIndex = 0;
/// <summary>
/// UI的原层级
/// </summary>
public int ZIndex
{
get { return _ZIndex; }
set { _ZIndex = value; }
}
private int _MaxZIndex = 9999;
/// <summary>
/// 计算当天经过的毫秒数(如果前后操作刚好跨天,将可能导致Bug)
/// </summary>
public int MaxZIndex
{
get
{
//DateTime d1 = DateTime.Now;
//DateTime d2 = DateTime.Parse(DateTime.Now.Year.ToString() + "-" + DateTime.Now.Month.ToString() + "-" + DateTime.Now.Day.ToString() + " 00:00:00");
//Int32 _MaxZIndex = Int32.Parse(Math.Ceiling(d1.Subtract(d2).TotalMilliseconds).ToString());
return _MaxZIndex;
}
set { _MaxZIndex = value; }
}
private bool _MouseEnterZIndex = false;
#endregion
#region 鼠标点击置于最上层
private bool _MouseDownMaxZIndex = false;
/// <summary>
/// 鼠标点击置于最上层
/// </summary>
public bool MouseDownMaxZIndex
{
get { return _MouseDownMaxZIndex; }
set { _MouseDownMaxZIndex = value; }
}
#endregion
#region 置于最上后,是否保持其层级信息不变
private bool _IsMaxZIndex = false;
/// <summary>
/// 置于最上后,是否保持其层级信息不变
/// </summary>
public bool IsMaxZIndex
{
get { return _IsMaxZIndex; }
set { _IsMaxZIndex = value; }
}
#endregion
#region 移动时是否至于半透明状态
private bool _IsMoveOpacity = false;
/// <summary>
/// 移动时是否至于半透明状态
/// </summary>
public bool IsMoveOpacity
{
get { return _IsMoveOpacity; }
set { _IsMoveOpacity = value; }
}
#endregion
#region 动画容器
/// <summary>
/// 动画容器
/// </summary>
public Storyboard Storyboard
{
get { return _Storyboard; }
set { _Storyboard = value; }
}
#endregion
#region 临时
private System.Windows.Media.Effects.Effect _Effect = null;
#endregion
#region 中心点
/// <summary>
/// 中心点
/// </summary>
public _RenderTransformOriginClass RenderTransformOrigin = null;
/// <summary>
/// 中心点
/// </summary>
public class _RenderTransformOriginClass
{
#region 声明
private AnimationSL _AnimationSL;
/// <summary>
/// 动画实例
/// </summary>
public AnimationSL AnimationSL
{
get { return _AnimationSL; }
set { _AnimationSL = value; }
}
/// <summary>
/// 实例
/// </summary>
/// <param name="AnimationSL_">动画实例</param>
public _RenderTransformOriginClass(AnimationSL AnimationSL_)
{
AnimationSL = AnimationSL_;
}
#endregion
#region 处理中心点
/// <summary>
/// 处理中心点
/// </summary>
/// <param name="CenterX">X轴</param>
/// <param name="CenterY">Y轴</param>
/// <param name="sTimeSpan">时间线</param>
public void AddCenter(Double CenterX, Double CenterY, Int32 sTimeSpan)
{
EasingPointKeyFrame EDK = new EasingPointKeyFrame();
EDK.KeyTime = TimeSpan.FromMilliseconds(sTimeSpan);
EDK.Value = new Point(CenterX, CenterY);
AnimationSL.PA_RenderTransformOrigin.KeyFrames.Add(EDK);
}
#endregion
}
#endregion
#region 将一个对象在水平或垂直方向进行放大或缩小
/// <summary>
/// 将一个对象在水平或垂直方向进行放大或缩小
/// </summary>
public _ScaleTransformClass ScaleTransform = null;
/// <summary>
/// 将一个对象在水平或垂直方向进行放大或缩小
/// </summary>
public class _ScaleTransformClass
{
#region 声明
private AnimationSL _AnimationSL;
/// <summary>
/// 动画实例
/// </summary>
public AnimationSL AnimationSL
{
get { return _AnimationSL; }
set { _AnimationSL = value; }
}
/// <summary>
/// 实例
/// </summary>
/// <param name="AnimationSL_">动画实例</param>
public _ScaleTransformClass(AnimationSL AnimationSL_)
{
AnimationSL = AnimationSL_;
}
#endregion
#region 处理X轴的变化
/// <summary>
/// 处理X轴的变化
/// </summary>
/// <param name="sSize">大小</param>
/// <param name="sTimeSpan">时间</param>
public void AddScaleX(Double sSize, Int32 sTimeSpan)
{
EasingDoubleKeyFrame EDK = new EasingDoubleKeyFrame();
EDK.KeyTime = TimeSpan.FromMilliseconds(sTimeSpan);
EDK.Value = sSize;
AnimationSL.DA_ScaleTransform_X.KeyFrames.Add(EDK);
}
#endregion
#region 处理Y轴的变化
/// <summary>
/// 处理Y轴的变化
/// </summary>
/// <param name="sSize">大小</param>
/// <param name="sTimeSpan">时间</param>
public void AddScaleY(Double sSize, Int32 sTimeSpan)
{
EasingDoubleKeyFrame EDK = new EasingDoubleKeyFrame();
EDK.KeyTime = TimeSpan.FromMilliseconds(sTimeSpan);
EDK.Value = sSize;
AnimationSL.DA_ScaleTransform_Y.KeyFrames.Add(EDK);
}
#endregion
}
#endregion
#region 将一个对象相对于X轴或Y轴进行倾斜
/// <summary>
/// 将一个对象相对于X轴或Y轴进行倾斜
/// </summary>
public _SkewTransformClass SkewTransform = null;
/// <summary>
/// 将一个对象相对于X轴或Y轴进行倾斜
/// </summary>
public class _SkewTransformClass
{
#region 声明
private AnimationSL _AnimationSL;
/// <summary>
/// 动画实例
/// </summary>
public AnimationSL AnimationSL
{
get { return _AnimationSL; }
set { _AnimationSL = value; }
}
/// <summary>
/// 实例
/// </summary>
/// <param name="AnimationSL_">动画实例</param>
public _SkewTransformClass(AnimationSL AnimationSL_)
{
_AnimationSL = AnimationSL_;
}
#endregion
#region 处理X轴的变化
/// <summary>
/// 处理X轴的变化
/// </summary>
/// <param name="sSize">大小</param>
/// <param name="sTimeSpan">时间</param>
public void Add_AngleX(Double AngleX, Int32 sTimeSpan)
{
EasingDoubleKeyFrame EDK = new EasingDoubleKeyFrame();
EDK.KeyTime = TimeSpan.FromMilliseconds(sTimeSpan);
EDK.Value = AngleX;
AnimationSL.DA_SkewTransform_X.KeyFrames.Add(EDK);
}
#endregion
#region 处理Y轴的变化
/// <summary>
/// 处理Y轴的变化
/// </summary>
/// <param name="sSize">大小</param>
/// <param name="sTimeSpan">时间</param>
public void Add_AngleY(Double AngleY, Int32 sTimeSpan)
{
EasingDoubleKeyFrame EDK = new EasingDoubleKeyFrame();
EDK.KeyTime = TimeSpan.FromMilliseconds(sTimeSpan);
EDK.Value = AngleY;
AnimationSL.DA_SkewTransform_Y.KeyFrames.Add(EDK);
}
#endregion
}
#endregion
#region 将一个对象旋转特定的角度
/// <summary>
/// 将一个对象旋转特定的角度
/// </summary>
public _RotateTransformClass RotateTransform = null;
/// <summary>
/// 将一个对象旋转特定的角度
/// </summary>
public class _RotateTransformClass
{
#region 声明
private AnimationSL _AnimationSL;
/// <summary>
/// 动画实例
/// </summary>
public AnimationSL AnimationSL
{
get { return _AnimationSL; }
set { _AnimationSL = value; }
}
/// <summary>
/// 实例
/// </summary>
/// <param name="AnimationSL_">动画实例</param>
public _RotateTransformClass(AnimationSL AnimationSL_)
{
AnimationSL = AnimationSL_;
}
#endregion
#region 处理旋转
/// <summary>
/// 处理旋转
/// </summary>
/// <param name="nAngle">旋转角度</param>
/// <param name="sTimeSpan">时间</param>
public void Angle(Double nAngle, Int32 sTimeSpan)
{
EasingDoubleKeyFrame EDK = new EasingDoubleKeyFrame();
EDK.KeyTime = TimeSpan.FromMilliseconds(sTimeSpan);
EDK.Value = nAngle;
AnimationSL.DA_RotateTransform.KeyFrames.Add(EDK);
}
#endregion
}
#endregion
#region 将一个对象在水平或垂直方向进行移动
/// <summary>
/// 将一个对象在水平或垂直方向进行移动
/// </summary>
public _TranslateTransformClass TranslateTransform = null;
/// <summary>
/// 将一个对象在水平或垂直方向进行移动
/// </summary>
public class _TranslateTransformClass
{
#region 声明
private AnimationSL _AnimationSL;
/// <summary>
/// 动画实例
/// </summary>
public AnimationSL AnimationSL
{
get { return _AnimationSL; }
set { _AnimationSL = value; }
}
/// <summary>
/// 实例
/// </summary>
/// <param name="AnimationSL_">动画实例</param>
public _TranslateTransformClass(AnimationSL AnimationSL_)
{
AnimationSL = AnimationSL_;
}
#endregion
#region 处理X轴的变化
/// <summary>
/// 处理X轴的变化
/// </summary>
/// <param name="sSize">大小</param>
/// <param name="sTimeSpan">时间</param>
public void AddMoveX(Double nDistanceX, Int32 sTimeSpan)
{
EasingDoubleKeyFrame EDK = new EasingDoubleKeyFrame();
EDK.KeyTime = TimeSpan.FromMilliseconds(sTimeSpan);
EDK.Value = nDistanceX;
AnimationSL.DA_TranslateTransform_X.KeyFrames.Add(EDK);
}
#endregion
#region 处理Y轴的变化
/// <summary>
/// 处理Y轴的变化
/// </summary>
/// <param name="sSize">大小</param>
/// <param name="sTimeSpan">时间</param>
public void AddMoveY(Double nDistanceY, Int32 sTimeSpan)
{
EasingDoubleKeyFrame EDK = new EasingDoubleKeyFrame();
EDK.KeyTime = TimeSpan.FromMilliseconds(sTimeSpan);
EDK.Value = nDistanceY;
AnimationSL.DA_TranslateTransform_Y.KeyFrames.Add(EDK);
}
#endregion
}
#endregion
#region 将一个对象翻转
/// <summary>
/// 将一个对象翻转
/// </summary>
public _CompositeTransformClass CompositeTransform = null;
/// <summary>
/// 将一个对象翻转
/// </summary>
public class _CompositeTransformClass
{
#region 声明
private AnimationSL _AnimationSL;
/// <summary>
/// 动画实例
/// </summary>
public AnimationSL AnimationSL
{
get { return _AnimationSL; }
set { _AnimationSL = value; }
}
/// <summary>
/// 实例
/// </summary>
/// <param name="AnimationSL_">动画实例</param>
public _CompositeTransformClass(AnimationSL AnimationSL_)
{
AnimationSL = AnimationSL_;
}
#endregion
#region 处理X轴的变化
/// <summary>
/// 处理X轴的变化
/// </summary>
/// <param name="sSize">大小</param>
/// <param name="sTimeSpan">时间</param>
public void AddScaleX(Double nDistanceX, Int32 sTimeSpan)
{
EasingDoubleKeyFrame EDK = new EasingDoubleKeyFrame();
EDK.KeyTime = TimeSpan.FromMilliseconds(sTimeSpan);
EDK.Value = nDistanceX;
AnimationSL.DA_CompositeTransform_X.KeyFrames.Add(EDK);
}
#endregion
#region 处理Y轴的变化
/// <summary>
/// 处理Y轴的变化
/// </summary>
/// <param name="sSize">大小</param>
/// <param name="sTimeSpan">时间</param>
public void AddScaleY(Double nDistanceY, Int32 sTimeSpan)
{
EasingDoubleKeyFrame EDK = new EasingDoubleKeyFrame();
EDK.KeyTime = TimeSpan.FromMilliseconds(sTimeSpan);
EDK.Value = nDistanceY;
AnimationSL.DA_CompositeTransform_Y.KeyFrames.Add(EDK);
}
#endregion
}
#endregion
#region 投影效果
/// <summary>
/// 投影效果
/// </summary>
public _DropShadowEffectClass DropShadowEffect = null;
/// <summary>
/// 投影效果
/// </summary>
public class _DropShadowEffectClass
{
#region 声明
private bool _IsEnabled = false;
private Double _Opacity = 100;
private System.Windows.Media.Color _Color = System.Windows.Media.Color.FromArgb(100, 128, 128, 128);
private Double _BlurRadius = 5;
private Double _Direction = 315;
private Double _ShadowDepth = 5;
private System.Windows.Media.Effects.DropShadowEffect _DropShadowEffect = null;
public System.Windows.Media.Effects.DropShadowEffect DropShadowEffect
{
get { return _DropShadowEffect; }
set { _DropShadowEffect = value; }
}
private AnimationSL _AnimationSL;
/// <summary>
/// 实例化
/// </summary>
public _DropShadowEffectClass(AnimationSL AnimationSL)
{
_AnimationSL = AnimationSL;
System.Windows.Media.Effects.DropShadowEffect _DSE = new System.Windows.Media.Effects.DropShadowEffect();
if (_DSE != null)
{
_DropShadowEffect = _DSE;
_DropShadowEffect.Color = Color;
_DropShadowEffect.Opacity = Opacity;
_DropShadowEffect.BlurRadius = BlurRadius;
_DropShadowEffect.Direction = _Direction;
_DropShadowEffect.ShadowDepth = _ShadowDepth;
}
}
#endregion
#region 是否打开投影效果
/// <summary>
/// 是否打开投影效果
/// </summary>
public bool IsEnabled
{
get { return _IsEnabled; }
set
{
_IsEnabled = value;
_DropShadowEffect.Color = Color;
_DropShadowEffect.Opacity = Opacity;
_DropShadowEffect.BlurRadius = BlurRadius;
_DropShadowEffect.Direction = _Direction;
_DropShadowEffect.ShadowDepth = _ShadowDepth;
}
}
#endregion
#region 投影颜色
/// <summary>
/// 投影颜色
/// </summary>
public System.Windows.Media.Color Color
{
get { return _Color; }
set
{
_Color = value; _DropShadowEffect.Color = Color;
_DropShadowEffect.Opacity = Opacity;
_DropShadowEffect.BlurRadius = BlurRadius;
_DropShadowEffect.Direction = _Direction;
_DropShadowEffect.ShadowDepth = _ShadowDepth;
}
}
#endregion
#region 透明度
/// <summary>
/// 透明度
/// </summary>
public Double Opacity
{
get { return _Opacity; }
set
{
_Opacity = value;
_DropShadowEffect.Color = Color;
_DropShadowEffect.Opacity = Opacity;
_DropShadowEffect.BlurRadius = BlurRadius;
_DropShadowEffect.Direction = _Direction;
_DropShadowEffect.ShadowDepth = _ShadowDepth;
}
}
#endregion
#region 模糊半径
/// <summary>
/// 模糊半径
/// </summary>
public Double BlurRadius
{
get { return _BlurRadius; }
set
{
_BlurRadius = value;
_DropShadowEffect.Color = Color;
_DropShadowEffect.Opacity = Opacity;
_DropShadowEffect.BlurRadius = BlurRadius;
_DropShadowEffect.Direction = _Direction;
_DropShadowEffect.ShadowDepth = _ShadowDepth;
}
}
#endregion
#region 投射的方向
/// <summary>
/// 投射的方向
/// </summary>
public Double Direction
{
get { return _Direction; }
set
{
_Direction = value;
_DropShadowEffect.Color = Color;
_DropShadowEffect.Opacity = Opacity;
_DropShadowEffect.BlurRadius = BlurRadius;
_DropShadowEffect.Direction = _Direction;
_DropShadowEffect.ShadowDepth = _ShadowDepth;
}
}
#endregion
#region 投影的距离
/// <summary>
/// 投影的距离
/// </summary>
public Double ShadowDepth
{
get { return _ShadowDepth; }
set
{
_ShadowDepth = value;
_DropShadowEffect.Color = Color;
_DropShadowEffect.Opacity = Opacity;
_DropShadowEffect.BlurRadius = BlurRadius;
_DropShadowEffect.Direction = _Direction;
_DropShadowEffect.ShadowDepth = _ShadowDepth;
}
}
#endregion
}
#endregion
#region 开始动画
/// <summary>
/// 开始动画
/// </summary>
/// <returns></returns>
public Storyboard Begin()
{
return _Beigin(UI);
}
/// <summary>
/// 开始动画
/// </summary>
/// <param name="UI_">FrameworkElement对象</param>
/// <returns></returns>
public Storyboard Begin(FrameworkElement UI_)
{
return _Beigin(UI_);
}
private Storyboard _Beigin(FrameworkElement UI_)
{
UI = UI_;
if (UI != null)
{
#region 注册声明
_TransformGroup = new System.Windows.Media.TransformGroup();
_ScaleTransform = new System.Windows.Media.ScaleTransform();
_SkewTransform = new System.Windows.Media.SkewTransform();
_RotateTransform = new System.Windows.Media.RotateTransform();
_TranslateTransform = new System.Windows.Media.TranslateTransform();
_CompositeTransform = new System.Windows.Media.CompositeTransform();
_TransformGroup.Children.Add(_ScaleTransform);
_TransformGroup.Children.Add(_SkewTransform);
_TransformGroup.Children.Add(_RotateTransform);
_TransformGroup.Children.Add(_TranslateTransform);
_TransformGroup.Children.Add(_CompositeTransform);
UI.RenderTransform = _TransformGroup;
Storyboard.Stop();
#region 中心点
Storyboard.Children.Remove(PA_RenderTransformOrigin);
{
Storyboard.SetTarget(PA_RenderTransformOrigin, UI);
Storyboard.SetTargetProperty(PA_RenderTransformOrigin,
new PropertyPath("(UIElement.RenderTransformOrigin)"));
Storyboard.Children.Add(PA_RenderTransformOrigin);
}
#endregion
#region 缩放处理
Storyboard.Children.Remove(DA_ScaleTransform_X);
{
Storyboard.SetTarget(DA_ScaleTransform_X, UI);
Storyboard.SetTargetProperty(DA_ScaleTransform_X,
new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)"));
Storyboard.Children.Add(DA_ScaleTransform_X);
}
Storyboard.Children.Remove(DA_ScaleTransform_Y);
{
Storyboard.SetTarget(DA_ScaleTransform_Y, UI);
Storyboard.SetTargetProperty(DA_ScaleTransform_Y,
new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)"));
Storyboard.Children.Add(DA_ScaleTransform_Y);
}
#endregion
#region 倾斜处理
Storyboard.Children.Remove(DA_SkewTransform_X);
{
Storyboard.SetTarget(DA_SkewTransform_X, UI);
Storyboard.SetTargetProperty(DA_SkewTransform_X,
new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[1].(SkewTransform.AngleX)"));
Storyboard.Children.Add(DA_SkewTransform_X);
}
Storyboard.Children.Remove(DA_SkewTransform_Y);
{
Storyboard.SetTarget(DA_SkewTransform_Y, UI);
Storyboard.SetTargetProperty(DA_SkewTransform_Y,
new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[1].(SkewTransform.AngleY)"));
Storyboard.Children.Add(DA_SkewTransform_Y);
}
#endregion
#region 旋转处理
Storyboard.Children.Remove(DA_RotateTransform);
{
Storyboard.SetTarget(DA_RotateTransform, UI);
Storyboard.SetTargetProperty(DA_RotateTransform,
new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)"));
Storyboard.Children.Add(DA_RotateTransform);
}
#endregion
#region 移动处理
Storyboard.Children.Remove(DA_TranslateTransform_X);
{
Storyboard.SetTarget(DA_TranslateTransform_X, UI);
Storyboard.SetTargetProperty(DA_TranslateTransform_X,
new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)"));
Storyboard.Children.Add(DA_TranslateTransform_X);
}
Storyboard.Children.Remove(DA_TranslateTransform_Y);
{
Storyboard.SetTarget(DA_TranslateTransform_Y, UI);
Storyboard.SetTargetProperty(DA_TranslateTransform_Y,
new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)"));
Storyboard.Children.Add(DA_TranslateTransform_Y);
}
#endregion
#region 翻转处理
Storyboard.Children.Remove(DA_CompositeTransform_X);
{
Storyboard.SetTarget(DA_CompositeTransform_X, UI);
Storyboard.SetTargetProperty(DA_CompositeTransform_X,
new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[4].(CompositeTransform.ScaleX)"));
Storyboard.Children.Add(DA_CompositeTransform_X);
}
Storyboard.Children.Remove(DA_CompositeTransform_Y);
{
Storyboard.SetTarget(DA_CompositeTransform_Y, UI);
Storyboard.SetTargetProperty(DA_CompositeTransform_Y,
new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[4].(CompositeTransform.ScaleY)"));
Storyboard.Children.Add(DA_CompositeTransform_Y);
}
#endregion
#region 是否产生投影效果
_Effect = UI.Effect;
if (DropShadowEffect.IsEnabled)
{
UI.Effect = DropShadowEffect.DropShadowEffect;
}
#endregion
#endregion
Storyboard.Begin();
Storyboard.Completed += new EventHandler(Storyboard_Completed);
}
return Storyboard;
}
private void Storyboard_Completed(object sender, EventArgs e)
{
if (this.Completed != null)
{
this.Completed(this.UI, sender, e);
}
}
#endregion
}
#endregion
步骤2:MethodExtendClasses.cs
public static class MethodExtendClasses
{
/// <summary>
/// FrameworkElement扩展动画属性
/// </summary>
public static DependencyProperty AnimationSL = DependencyProperty.Register("Animation", typeof(List<AnimationSL>), typeof(FrameworkElement), new PropertyMetadata(null));
/// <summary>
/// FrameworkElement扩展动画方法
/// </summary>
/// <param name="UI">FrameworkElement对象</param>
/// <returns></returns>
public static List<AnimationSL> Animation(this FrameworkElement UI)
{
List<AnimationSL> _Animation = new List<AnimationSL>();
if (UI.GetValue(AnimationSL) == null)
{
UI.SetValue(AnimationSL, _Animation);
}
_Animation = UI.GetValue(AnimationSL) as List<AnimationSL>;
foreach (AnimationSL animation in _Animation)
{
animation.UI = UI;
}
return _Animation;
}
}
步骤3:MainPage.xaml.cs
/// <summary>
/// 水平翻转360度
/// </summary>
public static AnimationSL InverHorizontal
{
get
{
AnimationSL _Animation = new AnimationSL();
_Animation.DropShadowEffect.IsEnabled = true;
_Animation.RenderTransformOrigin.AddCenter(0.5, 0.5, 0);
_Animation.CompositeTransform.AddScaleX(-1, 0);
_Animation.CompositeTransform.AddScaleX(1, 500);
return _Animation;
}
}
/// <summary>
/// 垂直翻转360度
/// </summary>
public static AnimationSL InvertVertical
{
get
{
AnimationSL _Animation = new AnimationSL();
_Animation.RenderTransformOrigin.AddCenter(0.5, 0.5, 0);
_Animation.CompositeTransform.AddScaleY(-1, 0);
_Animation.CompositeTransform.AddScaleY(1, 500);
_Animation.DropShadowEffect.IsEnabled = false;
return _Animation;
}
}
/// <summary>
/// 震动弹出
/// </summary>
public static AnimationSL Pop_Shock
{
get
{
AnimationSL _Animation = new AnimationSL();
_Animation.RenderTransformOrigin.AddCenter(0.5, 0.5, 0);
_Animation.ScaleTransform.AddScaleX(0, 0);
_Animation.ScaleTransform.AddScaleY(0, 0);
_Animation.ScaleTransform.AddScaleX(3, 100);
_Animation.ScaleTransform.AddScaleY(3, 100);
_Animation.ScaleTransform.AddScaleX(1, 300);
_Animation.ScaleTransform.AddScaleY(1, 300);
return _Animation;
}
}
步骤4:MainPage.xaml.cs
private void Button_Click1(object sender, RoutedEventArgs e)
{
rectangle.Animation().Add(InverHorizontal);
rectangle.Animation()[0].Begin();
}
private void Button_Click2(object sender, RoutedEventArgs e)
{
rectangle.Animation().Add(InvertVertical);
rectangle.Animation()[1].Begin();
}
private void Button_Click3(object sender, RoutedEventArgs e)
{
rectangle.Animation().Add(Pop_Shock);
rectangle.Animation()[2].Begin();
}