微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 如何使故事板淡入,暂停,然后淡出(通过代码)?

我写了以下代码.它尝试创建一个执行以下操作的故事板:

>淡入500毫秒
>暂停1000ms
>淡出500毫秒

但是在运行时获取system.invalidOperationException,后跟以下输出

Additional @R_339_4045@ion: 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 …然后每个单独的动画成为其中的关键帧,它应该在它们之间线性动画.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐