DoubleAnimation方法
现在silverlight中还不支持直接用c#代码来创建动画,只能通过XamlReader来加载storyboard。
今天看了DoubleAnimation这个方法。可以动态的设置属性。 这里就很奇怪。我动态的new出来的巨型一直不发生变化。而直接在舞台上画出的巨型就能发生变化。
研究了好久才发现DoubleAnimation只能操作已经声明过的属性。
目前对“ Storyboard.TargetProperty”这个属性还不是很明白。
今天看了DoubleAnimation这个方法。可以动态的设置属性。 这里就很奇怪。我动态的new出来的巨型一直不发生变化。而直接在舞台上画出的巨型就能发生变化。
研究了好久才发现DoubleAnimation只能操作已经声明过的属性。
<Rectangle Width="46" Height="41" Fill="#FFA74545" Stroke="#FF000000" Canvas.Left="154"
Canvas.Top="262" x:Name="ox" RenderTransformOrigin="0.5,0.5">
<Rectangle.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleX="1" ScaleY="1"/>
<SkewTransform AngleX="0" AngleY="0"/>
<RotateTransform Angle="34.744"/>
<TranslateTransform X="0" Y="0"/>
</TransformGroup>
</Rectangle.RenderTransform>
</Rectangle>
Canvas.Top="262" x:Name="ox" RenderTransformOrigin="0.5,0.5">
<Rectangle.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleX="1" ScaleY="1"/>
<SkewTransform AngleX="0" AngleY="0"/>
<RotateTransform Angle="34.744"/>
<TranslateTransform X="0" Y="0"/>
</TransformGroup>
</Rectangle.RenderTransform>
</Rectangle>
private const string ANIMATION = "<Storyboard Name=\"TestStoryboard\">"
+ "<DoubleAnimation"
+ " Storyboard.TargetName=\"ox\""
+ " Storyboard.TargetProperty=\"(UIElement.RenderTransform).
(TransformGroup.Children)[3].(TranslateTransform.X)\""
+ " From=\"0\" To=\"100\" Duration=\"0:0:5\" />"
+ "</Storyboard>";
+ "<DoubleAnimation"
+ " Storyboard.TargetName=\"ox\""
+ " Storyboard.TargetProperty=\"(UIElement.RenderTransform).
(TransformGroup.Children)[3].(TranslateTransform.X)\""
+ " From=\"0\" To=\"100\" Duration=\"0:0:5\" />"
+ "</Storyboard>";
Storyboard storyboard = XamlReader.Load(ANIMATION) as Storyboard;
this.Resources.Add(storyboard);
storyboard.Begin();
这里<Rectangle.RenderTransform>是必须要的。多一行少一行都不行。不然就不会产生动画。this.Resources.Add(storyboard);
storyboard.Begin();
目前对“ Storyboard.TargetProperty”这个属性还不是很明白。