WPF中多个StoryBoard动画切换控制

多个StoryBoard动画根据控制条件进行播放,以2个StoryBoard为例,分如下几种控制状况:
1.StoryBoard1播放结束后自动启动StoryBoard2的播放;
2.在播放StoryBoard1的过程中用户触发控制事件直接跳到StoryBoard2进行播放;
3.在播放StoryBoard2的过程中用户触发控制事件返回StoryBoard1进行重新播放;

主要以C#后台控制为主

首先启动StoryBoard1进行播放,为了能够对StoryBoard动画进行控制,在启动StoryBoard的时候必须调用相应的开始函数,使StoryBoard处于可控状态,通过参数TimeSpan tsDuration 来控制动画播放的长度,为了使动画在播放到指定位置之后停在当前位置,必须设置动画时间线属性为:
<Storyboard x:Key="Storyboard1"  FillBehavior = "HoldEnd">
使动画时间线完成时不改变属性值

         private void StartStoryBorad1( TimeSpan tsDuration )

        {

               Storyboard Run1 = FindResource("Storyboard1") as Storyboard;

               Run1.BeginTime = TimeSpan.FromSeconds(0);
               Run1.Duration = tsDuration ;
                Run1.Begin(this, true);
        }
        // Summary:
        //     Applies the animations associated with this System.Windows.Media.Animation.Storyboard
        //     to their targets and initiates them.
        //
        // Parameters:
        //   containingObject:
        //     An object contained within the same name scope as the targets of this storyboard's
        //     animations. Animations without a System.Windows.Media.Animation.Storyboard.TargetName
        //     are applied to containingObject.
        //
        //   isControllable:
        //     true if the storyboard should be interactively controllable; otherwise, false.
  //public void Begin(FrameworkElement containingObject, bool isControllable);     


需要为StoryBoard1定义Completed事件如下:
         private void Storyboard1_Completed(object sender, EventArgs e)
         {
             Storyboard Run1 = FindResource("Storyboard1") as Storyboard;
             Run1.Stop( this );
             StartStoryBoard2();//启动StoryBoard2,定义同StartStoryBoard1()
         }


当指定时间tsDuration小于StoryBoard1的TimelineGroup的Duration时,StoryBoard仍然会触发Completed事件,但是Storyboard1_Completed中调用了Storyboard1.Stop(this),这个调用会使StoryBoard1动画返回到初始状态,这点必须注意。


在StoryBoard1中用户触发事件,使动画StoryBoard1在播放完成之前跳到StoryBoard2:
        private void Stage1To2_Click(object sender, System.Windows.RoutedEventArgs e)
        {
              Storyboard1_Completed(null,null);
        }


在StoryBoard2中用户触发事件,使动画StoryBoard2在播放到指定位置之前跳到StoryBoard1:
        private void btnStage2To1_Click(object sender, System.Windows.RoutedEventArgs e)
        {

             Storyboard Run1 = FindResource("Storyboard2") as Storyboard;

             Run1.Stop( this );

             StartStoryBoard1();
        }

以上控制基于Blend3实现。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值