Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 多帧情节提要_C#_Wpf_Animation_Storyboard - Fatal编程技术网

C# 多帧情节提要

C# 多帧情节提要,c#,wpf,animation,storyboard,C#,Wpf,Animation,Storyboard,我想为三帧的不透明度设置动画,它们的不透明度值的时间线应该与图像中的一样。此外,动画应该是永远的,但我也希望每个周期之间的延迟。我的意思是不透明度应该保持在最后一个值“1”上一段指定的时间,然后时间线应该再次重复。我尝试使用一个有三个双动画的故事板,但我无法计算出每个循环之间的延迟以及每个动画之间的延迟。为每个动画设置开始时间对我不起作用 由于WPF中动画的灵活性,有很多方法可以解决这个问题。这里我介绍最直观的解决方案。从图像中,必须使用某种离散的关键帧。在这种情况下,我们需要3个使用关键帧的双

我想为三帧的不透明度设置动画,它们的不透明度值的时间线应该与图像中的一样。此外,动画应该是永远的,但我也希望每个周期之间的延迟。我的意思是不透明度应该保持在最后一个值“1”上一段指定的时间,然后时间线应该再次重复。我尝试使用一个有三个双动画的故事板,但我无法计算出每个循环之间的延迟以及每个动画之间的延迟。为每个动画设置开始时间对我不起作用


由于WPF中动画的灵活性,有很多方法可以解决这个问题。这里我介绍最直观的解决方案。从图像中,必须使用某种离散的关键帧。在这种情况下,我们需要3个使用关键帧的双动画,每个都应该有2个离散双关键帧。所有这些关键帧都应该相同。我们只需要使用关键帧适当地设置
doubleanimation的
BeginTime
。我们不需要设置
持续时间
,它将根据
关键时间
(属于
离散双关键帧
)和
开始时间
(属于
使用关键帧的双动画
)自动延迟。 但是,如果希望在周期之间有一些延迟,我们必须使用关键帧为最后一个
双动画设置
持续时间

下面是一个简单的例子:

<StackPanel>
   <StackPanel.Triggers>
       <EventTrigger RoutedEvent="Loaded">
          <BeginStoryboard>
              <Storyboard Storyboard.TargetProperty="Opacity"  
                          RepeatBehavior="Forever">
                 <DoubleAnimationUsingKeyFrames Storyboard.TargetName="i1"
                                                BeginTime="0:0:0">
                    <DiscreteDoubleKeyFrame KeyTime="0:0:0" Value="0"/>
                    <DiscreteDoubleKeyFrame KeyTime="0:0:1" Value="1"/>
                 </DoubleAnimationUsingKeyFrames>
                 <DoubleAnimationUsingKeyFrames Storyboard.TargetName="i2" 
                                                BeginTime="0:0:1">
                    <DiscreteDoubleKeyFrame KeyTime="0:0:0" Value="0"/>
                    <DiscreteDoubleKeyFrame KeyTime="0:0:1" Value="1"/>
                 </DoubleAnimationUsingKeyFrames>
                 <DoubleAnimationUsingKeyFrames Storyboard.TargetName="i3" 
                                            BeginTime="0:0:2" Duration="0:0:3">
                    <DiscreteDoubleKeyFrame KeyTime="0:0:0" Value="0"/>
                    <DiscreteDoubleKeyFrame KeyTime="0:0:1" Value="1"/>
                 </DoubleAnimationUsingKeyFrames>
              </Storyboard>
          </BeginStoryboard>
       </EventTrigger>
   </StackPanel.Triggers>
   <TextBlock Name="i1">Item 1</TextBlock>
   <TextBlock Name="i2">Item 2</TextBlock>
   <TextBlock Name="i3">Item 3</TextBlock>
</StackPanel>

项目1
项目2
项目3

为了简单起见,我在代码中使用了
TextBlock
。在这里,您可以看到处于
0
不透明状态的时间(对于每个
TextBlock
)为1秒。由此,您可以使用关键帧为每个
双动画正确派生
开始时间
。最后一个动画的
持续时间
3
秒,这意味着延迟约为
2
秒(最后一个动画的1秒从总共3秒中扣除)。

Hi King,感谢您的回复,效果非常好!!然而,我有一个问题。。。动画发生后,我的帧将消失。也就是说,在每个周期之间,所有3个都会在整个过程再次开始之前消失一次。然而,如果我复制粘贴你的解决方案,它的工作很好!我在后面的代码中这样做,但我想我使用了相同的逻辑。有什么想法吗?@schwarz,你是说你的代码背后有着相同的逻辑,但却不能正常工作?如果是这样的话,很难说是怎么回事。你应该仔细检查一下。@schwarz我认为问题在于
BeginTime
太快了,我的意思是,即使
0
不透明度的持续时间还没有过去,它也会开始。在你的代码中,持续时间仍然是
1
秒(就像在我的代码中一样),但是第二个动画的
BeginTime
0.1
(应该是
1
),第三个是
0.2
(应该是
2
)。你说得对!我知道你的意思。。。问题解决了,又来了!!