现在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”这个属性还不是很明白。