none
Metro C# 动画效果的动态设定 RRS feed

  • 问题

  • 貌似Metro的动画效果都要设定target,看了例子都是在XAML里写死了。

    这样做10个按钮的效果,是不是要定义10次。这样是不是太傻了?或者有其他写法?

    有没有代码动态设定的例子?

    <DoubleAnimation Storyboard.TargetName="Button1" Storyboard.TargetProperty="(Canvas.Top)" Duration="0:0:0.2" By="3"/>

    2012年6月5日 14:47

答案

  • 十个效果都一样吗?都一样的话,你设计一个TargetType为Button的Style或者ControlTemplate, 将这个效果动画放入这个Style中就可以了,然后所有要应用的Button 使用这个样式或者模板即可。类似的自定义样式模板,参考Silverlight的文档,这一点上Metro和SL很相似:http://msdn.microsoft.com/en-us/library/cc278075(VS.95).aspx

    XAML中的写法,都有对应的后台代码写法的。你这一行的对应的C#为:

      DoubleAnimation da = new DoubleAnimation();
      da.Duration = new Duration(new TimeSpan(0, 0, 0, 0, 200));
      da.By = 3;
      da.SetValue(Storyboard.TargetNameProperty, "Button1");
      da.SetValue(Storyboard.TargetPropertyProperty, new PropertyPath("(Canvas.Top)"));

    Sincerely,

    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 whyuan 2012年6月6日 9:30
    2012年6月6日 8:06
    版主

全部回复

  • 十个效果都一样吗?都一样的话,你设计一个TargetType为Button的Style或者ControlTemplate, 将这个效果动画放入这个Style中就可以了,然后所有要应用的Button 使用这个样式或者模板即可。类似的自定义样式模板,参考Silverlight的文档,这一点上Metro和SL很相似:http://msdn.microsoft.com/en-us/library/cc278075(VS.95).aspx

    XAML中的写法,都有对应的后台代码写法的。你这一行的对应的C#为:

      DoubleAnimation da = new DoubleAnimation();
      da.Duration = new Duration(new TimeSpan(0, 0, 0, 0, 200));
      da.By = 3;
      da.SetValue(Storyboard.TargetNameProperty, "Button1");
      da.SetValue(Storyboard.TargetPropertyProperty, new PropertyPath("(Canvas.Top)"));

    Sincerely,

    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 whyuan 2012年6月6日 9:30
    2012年6月6日 8:06
    版主
  • 请问设好的da怎么放到Storyboard上

    Storyboard sb = new Storyboard();

    sb.Children.add(da);

    运行到第2行报错,System.AccessViolationException

    尝试读或写受保护的内存。

    2012年6月12日 8:39
  • da(DoubleAnimation )就是 sb.Children.Add(da); 即可,你的代码没有问题。 只是你的问题在于一旦动画开始后是不能改变其内容和中间值,否是想象一下,动画一旦开始,他已经计算好中间值,你再改变它就会导致他不知道什么值才是他所要的,所以动画中都是会将对象给冻结住的。你必须等待动画结束才可以操作。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年6月12日 9:09
    版主