我正在从代码后面创建一个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。
答案 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}}