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