如何在特定状态下停止动画

时间:2013-11-26 10:36:17

标签: c# wpf storyboard

我正在从代码后面创建一个fadeIn / fadeOut动画。我试图在特定的眨眼时间停止动画,它工作正常。但是我想确保当我的动画停止时它应该停止在fadeOut状态。以下是我的代码:

public void AddAnimation(long blinkDuration = 0)
        {
            var fadeIn = new DoubleAnimation(0.3, 1, TimeSpan.FromSeconds(1), FillBehavior.HoldEnd)
            {
                BeginTime = TimeSpan.FromSeconds(0)
            };

            var fadeOut = new DoubleAnimation(1.0, 0.3, TimeSpan.FromSeconds(1), FillBehavior.HoldEnd)
            {
                BeginTime = TimeSpan.FromSeconds(0.5)
            };

            storyboard = new Storyboard();
            Storyboard.SetTarget(fadeIn, this);
            Storyboard.SetTarget(fadeOut, this);
            Storyboard.SetTargetProperty(fadeIn, new PropertyPath("(Opacity)"));
            Storyboard.SetTargetProperty(fadeOut, new PropertyPath("(Opacity)"));
            storyboard.RepeatBehavior = blinkDuration == 0
                                            ? RepeatBehavior.Forever
                                            : new RepeatBehavior(new TimeSpan(0, 0, Convert.ToInt32(blinkDuration)));
            storyboard.Children.Add(fadeIn);
            storyboard.Children.Add(fadeOut);
            storyboard.Begin();
        }

我的问题是如何在眨眼间隔后在故事板停止时使我的图标状态为fadeOut。

2 个答案:

答案 0 :(得分:2)

我修好了。我改变了我的Storyboard.Begin调用和注册的storyboard.Completed事件,我正在调用storyboard.Stop()。

以下是我更改的代码:

storyboard.Completed += StoryboardCompleted;
storyboard.Begin(this, true);

void StoryboardCompleted(object sender, EventArgs e)
{
   storyboard.Stop(this);
}

答案 1 :(得分:0)

您可以使用HoldEnd To值,该值将保留您在Storyboard中设置的最后一个值(或Storyboard值)。这样,您可以确保最终值。您可能使用此属性的唯一问题是您可能需要多次运行动画。

为此,您可以将处理程序附加到FillBehaviour property,并在完成后重新运行private void OnStoryboardCompleted(object sender, EventArgs e) { if (someConditionIsTrue) storyboard.Start(); } 如果满足某个条件(运行次数,或秒数,或数据)已经到了,等等):

{{1}}