即使在设置之后,WPF故事板动画也会永远循环



我有一个基于绑定到DataTriggerDependencyProperty的自定义用户控件来动画。如果DependencyProperty等于Failure,它应该在用户控件中动画矩形(名为buttonColor)的填充颜色。

由于某种原因,即使我将RepeatBehavior设置为包括1在内的任何值,它也总是永远循环。

如果我删除了RepeatBehavior属性,它只播放一次动画(如预期)。下面是我有问题的代码:

<DataTrigger Binding="{Binding Path=ButtonAction.Status}" Value="Failure">
    <DataTrigger.EnterActions>
        <StopStoryboard BeginStoryboardName="Pulse"/>
        <BeginStoryboard>
            <Storyboard RepeatBehavior="1">
                <ColorAnimation Storyboard.TargetName="buttonColor"
                                Storyboard.TargetProperty="Fill.Color" 
                                To="{StaticResource FailedColor}" 
                                AutoReverse="True" />
            </Storyboard>
        </BeginStoryboard>
    </DataTrigger.EnterActions>
</DataTrigger>

重复N次的正确语法是:

<Storyboard RepeatBehavior="Nx">
例如:

<Storyboard RepeatBehavior="6x">

设置持续时间值还将限制重复行为,因为它具有优先级。所以如果你在ColorAnimationUsingKeyFrames标签中设置了重复行为但是在storyboard中你设置了Duration="0:0:4"那么动画只会重复4秒

为了明确并添加到答案中,如果实际上想要连续重复,可以将RepeatBehavior设置为Forever,例如这里我围绕其中心点旋转矢量。

<Storyboard x:Key="ChaseRotate" RepeatBehavior="Forever">
    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)" Storyboard.TargetName="path">
         <EasingDoubleKeyFrame KeyTime="0:0:1" Value="360"/>
    </DoubleAnimationUsingKeyFrames>
</Storyboard>

参见如何:旋转对象- WPF .NET Framework

最新更新