我写了以下代码.它尝试创建一个执行以下操作的故事板:
>淡入500毫秒
>暂停1000ms
>淡出500毫秒
但是在运行时获取System.InvalidOperationException,后跟以下输出:
Additional information: Multiple animations in
the same containing Storyboard cannot target the
same property on a single element.
这似乎表明它试图一次完成所有动画,而不是顺序完成.
private Storyboard createStoryboard()
{
Storyboard board = new Storyboard();
addFadeToStoryboard(board, 0, 1, 500);
addFadeToStoryboard(board, 1, 1, 1000);
DoubleAnimation fadeOut = addFadeToStoryboard(board, 1, 0, 500);
fadeOut.Completed += new EventHandler(onFadeCompleted);
Storyboard.SetTarget(board, this);
return board;
}
private DoubleAnimation addFadeToStoryboard(Storyboard board,
double fadeFrom, double fadeTo, double milliseconds)
{
DoubleAnimation fade = new DoubleAnimation()
{
Duration = new Duration(TimeSpan.FromMilliseconds(milliseconds)),
From = fadeFrom,
To = fadeTo,
RepeatBehavior = new RepeatBehavior(1)
};
Storyboard.SetTargetProperty(fade,
new PropertyPath(UIElement.OpacityProperty));
board.Children.Add(fade);
return fade;
}
我怎样才能顺序完成?我是否误解了故事板的基本内容?
谢谢
解决方法:
如果故事板包含多个动画,则它们全部同时启动并同时运行.您可以将DoubleAnimations上的BeginTime属性设置为TimeSpan以指示它们应该何时开始…因此,通过传入所有先前动画的累积时间,您应该能够获得顺序效果.
编辑:对不起 – 我刚刚注意到Silverlight标签.我的答案适用于WPF …我不知道Silverlight和WPF动画之间的区别.
This可能有所帮助.它看起来像是WPF和Silverlight之间的区别. WPF可以在同一个故事板中处理不同动画上的相同属性的动画,而Silverlight则不然.他们建议使用单个DoubleAnimationUsingKeyFrames而不是单独的DoubleAnimations …然后每个单独的动画成为其中的关键帧,它应该在它们之间线性动画.
原文地址:https://codeday.me/bug/20190630/1337882.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。