WPF动画

一,使用DoubleAnimation创建动画

复制代码
//1,创建剧本
Storyboard storyboard = new Storyboard();
//2,创建动画
DoubleAnimation doubleAnimation = new DoubleAnimation(
        valueStart,//起始值
        valueEnd,//终点值
        new Duration(TimeSpan.FromMilliseconds(1000s))//动画时间域
       );
//3,Target
Storyboard.SetTarget(doubleAnimation, rect);//Target对象
Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath("(Canvas.Left)"));//Target属性
//4,在剧本中添加动画
storyboard.Children.Add(doubleAnimation);
//5,在资源中添加剧本
if(!Resources.Contains("animation"))
{
  Resources.Add("animation", storyboard);
}
//6,开始
storyboard.Begin();
复制代码

 

二,使用CompositionTarget

CompositionTarget对象可以根据每个帧回调来创建自定义动画。

1,注册事件

CompositionTarget.Rendering += new EventHandler(ReflashView);

2,事件的实现

private void ReflashView(object sender, EventArgs e) {
  double rectX = Canvas.GetLeft(rect);
  double rectY = Canvas.GetTop(rect);
  //算法自拟
  Canvas.SetLeft(rect, valueX);
  Canvas.SetTop(rect, valueY);
}

三, DispatcherTimer动画

基于界面线程的逐帧动画,与CompositionTarget动画不同,DispatcherTimer动画可以很轻松的通过Interval 来控制刷新一个对象属性的频率了。

1, 创建一个DispatchTimer

DispatcherTimer dispatcherTimer = new DispatcherTimer(DispatcherPriority.Normal);
dispatcherTimer.Tick += dispatcherTimer_Tick;
dispatcherTimer.Interval = TimeSpan.FromMilliseconds(50);
dispatcherTimer.Start();

2, 实现dispatcherTimer_Tick函数

void dispatcherTimer_Tick(object sender, EventArgs e)
{
  double rectX = Canvas.GetLeft(rect);   double rectY = Canvas.GetTop(rect);   //算法自拟   Canvas.SetLeft(rect, valueX);   Canvas.SetTop(rect, valueY);
}

 

 

posted @   陈惊蛰  阅读(4051)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示

"赠我一听冰阔落"