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实现。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 WPF 实现多个文本同时闪烁,可以使用多个 Storyboard 和 DoubleAnimation 来控制它们的闪烁效果。以下是一个示例代码,你可以根据自己的需求进行调整。 ```xaml <Window.Resources> <Storyboard x:Key="Text1Storyboard" RepeatBehavior="Forever"> <DoubleAnimation Storyboard.TargetName="Text1" Storyboard.TargetProperty="Opacity" From="1" To="0" Duration="0:0:0.5" /> </Storyboard> <Storyboard x:Key="Text2Storyboard" RepeatBehavior="Forever"> <DoubleAnimation Storyboard.TargetName="Text2" Storyboard.TargetProperty="Opacity" From="1" To="0" Duration="0:0:0.5" /> </Storyboard> </Window.Resources> <Grid> <TextBlock x:Name="Text1" Text="Text 1" FontSize="24" Foreground="Red" /> <TextBlock x:Name="Text2" Text="Text 2" FontSize="24" Foreground="Blue" Margin="0,30,0,0" /> </Grid> ``` 在代码,我们定义了两个名为 Text1Storyboard 和 Text2StoryboardStoryboard,它们都是无限循环的动画,通过控制 Text1 和 Text2 的 Opacity 属性来实现文本的闪烁效果。 在窗口,我们添加了两个 TextBlock 控件,分别显示了文本 "Text 1" 和 "Text 2"。通过设置它们的 FontSize、Foreground 和 Margin 属性,我们可以控制文本的样式和位置。 最后,我们将 Text1Storyboard 和 Text2Storyboard 与窗口的 Loaded 事件关联,这样当窗口加载完成后,动画就会开始运行。 ```csharp private void Window_Loaded(object sender, RoutedEventArgs e) { var text1Storyboard = FindResource("Text1Storyboard") as Storyboard; text1Storyboard.Begin(); var text2Storyboard = FindResource("Text2Storyboard") as Storyboard; text2Storyboard.Begin(); } ``` 在代码,我们获取名为 Text1Storyboard 和 Text2StoryboardStoryboard 对象,并调用 Begin() 方法来开始动画
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值