一个简单的Animation定义了一个简单的动画,很容易想到的是,如果若干个Animation同时作用于一个对象,那么这个对象不就可以表现复杂的动画了吗,对,这就是Storyboard
Storyboard可以看做是Animation的容器,它包含了若干的简单动画来完成一个复杂动画。
但值得注意的是并非每个属性都能够使用Animation,它必须满足以下条件:
1,它必须是Dependency Property
2,它所在类必须继承于DependencyObject,必须实现了IAnimatable接口.
3,必须有类型一致的Animation Type(即Color类型使用ColorAniamtion,Point类型使用PointAnimation等)
这是个蚂蚁线,给这蚂蚁线定义一个DoubleAnimation,并指定了它的开始值和结束值以及它由开始值到达结束值所需的时间
<Window.Triggers>
<!--BeginStoryboard:要在EventTrigger中触发调用,RoutedEvent是响应的事件-->
<EventTrigger RoutedEvent="Window.Loaded" SourceName="win">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation From="0" To="100" RepeatBehavior="Forever" Duration="0:0:5" Storyboard.TargetName="line1" Storyboard.TargetProperty="(Canvas.Right)" AutoReverse="True" BeginTime="0:0:2" FillBehavior="HoldEnd"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Window.Triggers>
<Canvas Background="#FFDFCAF9" x:Name="MaYiXian" Margin="10">
<Line Name="line1" X1="0" Y1="100" X2="100" Y2="100" Stroke="Yellow" StrokeDashArray="2,2" StrokeThickness="3"></Line>
<Line Name="line2" X1="200" Y1="200" X2="100" Y2="100" Stroke="Yellow" StrokeDashArray="2,2" StrokeThickness="3">
<Line.Triggers>
<EventTrigger RoutedEvent="Line.Loaded" >
<BeginStoryboard>
<Storyboard>
<DoubleAnimation From="0" To="100" RepeatBehavior="Forever" Duration="0:0:5" Storyboard.TargetProperty="StrokeDashOffset"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Line.Triggers>
</Line>
<Line Name="line3" X1="100" Y1="0" X2="100" Y2="100" Stroke="Yellow" StrokeDashArray="2,2" StrokeThickness="3">
<Line.Triggers>
<EventTrigger RoutedEvent="Line.Loaded" >
<BeginStoryboard>
<Storyboard>
<DoubleAnimation From="1" To="100" RepeatBehavior="Forever" Duration="0:0:5" Storyboard.TargetProperty="StrokeDashOffset"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Line.Triggers>
</Line>
</Canvas>