방법: 주기가 반복되는 동안 애니메이션 값 누적
이 예제에서는 IsCumulative 속성을 사용하여 반복 주기에 걸쳐 애니메이션 값을 누적하는 방법을 보여 줍니다.
예제
반복 주기에 걸쳐 애니메이션의 기본 값을 누적하려면 IsCumulative 속성을 사용합니다. 예를 들어 애니메이션을 9회(RepeatBehavior = “9x”) 반복하도록 설정하고 10~15(From = 10 To = 15)의 애니메이션 효과를 속성에 설정한 경우, 속성에는 첫 번째 주기 동안 10~15의 애니메이션 효과가 적용되고, 두 번째 주기 동안 15~20, 세 번째 주기 동안 20~25 등으로 애니메이션 효과가 적용됩니다. 따라서 각 애니메이션 주기는 이전 애니메이션 주기의 마지막 애니메이션 값을 기본 값으로 사용합니다.
대부분의 기본 애니메이션 및 대부분의 키 프레임 애니메이션에서 IsCumulative
속성을 사용할 수 있습니다. 자세한 내용은 애니메이션 개요 및 키 프레임 애니메이션 개요를 참조하세요.
다음 예제에서는 4개의 사각형 너비에 애니메이션 효과를 주는 이 동작을 보여 줍니다. 예:
DoubleAnimation으로 첫 번째 사각형에 애니메이션 효과를 주고 IsCumulative 속성을
true
로 설정합니다.DoubleAnimation으로 두 번째 사각형에 애니메이션 효과를 주고 IsCumulative 속성을
false
의 기본 값으로 설정합니다.DoubleAnimationUsingKeyFrames로 세 번째 사각형에 애니메이션 효과를 주고 IsCumulative 속성을
true
로 설정합니다.DoubleAnimationUsingKeyFrames로 마지막 사각형에 애니메이션 효과를 주고 IsCumulative 속성을
false
로 설정합니다.
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StackPanel Margin="20" >
<!-- This rectangle is animated with DoubleAnimation and IsCumulative set to "True". -->
<Rectangle Name="withIsCumulative"
Width="100" Height="20" Margin="12,0,0,5" Fill="#AA3333FF" HorizontalAlignment="Left" />
<!-- This rectangle is animated with DoubleAnimation and IsCumulative set to "False". -->
<Rectangle Name="withoutIsCumulative"
Width="100" Height="20" Margin="12,0,0,5" Fill="#AA3333FF" HorizontalAlignment="Left" />
<!-- This rectangle is animated with DoubleAnimationUsingKeyFrames and IsCumulative set to "True". -->
<Rectangle Name="withIsCumulativeUsingKeyFrames"
Width="100" Height="20" Margin="12,0,0,5" Fill="#AA3333FF" HorizontalAlignment="Left" />
<!-- This rectangle is animated with DoubleAnimationUsingKeyFrames and IsCumulative set to "False". -->
<Rectangle Name="withoutIsCumulativeUsingKeyFrames"
Width="100" Height="20" Margin="12,0,0,5" Fill="#AA3333FF" HorizontalAlignment="Left" />
<!-- Create a button to restart the animations. -->
<Button Margin="0,30,0,0" HorizontalAlignment="Left">
Restart Animations
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<BeginStoryboard>
<Storyboard>
<!-- DoubleAnimation with IsCumulative set to "True". Because IsCumulative is set to "True",
the base values of the animation will accumulate over repeat cycles. In this example, the
first iteration will be from 100 to 200, the second will be from 200 to 300, the third from
300 to 400, etc. -->
<DoubleAnimation
Storyboard.TargetName="withIsCumulative"
Storyboard.TargetProperty="Width"
RepeatBehavior="4x"
AutoReverse="True"
IsCumulative="True"
Duration="0:0:3" From="100" To="200" />
<!-- DoubleAnimation with IsCumulative set to "False". The starting value 100 pixels and repeat
cycles do not build on earlier ones. -->
<DoubleAnimation
Storyboard.TargetName="withoutIsCumulative"
Storyboard.TargetProperty="Width"
RepeatBehavior="4x"
AutoReverse="True"
IsCumulative="False"
Duration="0:0:3" From="100" To="200" />
<!-- DoubleAnimationUsingKeyFrames with IsCumulative set to "True". Similar to the DoubleAnimation
above, the base value of each cycle builds on the last one. Note that the output value
is the total output value from all the key frames for a total output of 100 pixels. -->
<DoubleAnimationUsingKeyFrames
Storyboard.TargetName="withIsCumulativeUsingKeyFrames"
Storyboard.TargetProperty="Width"
RepeatBehavior="4x"
AutoReverse="True"
IsCumulative="True" >
<DoubleAnimationUsingKeyFrames.KeyFrames>
<LinearDoubleKeyFrame Value="100" KeyTime="0:0:0" />
<LinearDoubleKeyFrame Value="130" KeyTime="0:0:1" />
<SplineDoubleKeyFrame KeySpline="0.6,0.0 0.9,0.00" Value="200" KeyTime="0:0:3" />
</DoubleAnimationUsingKeyFrames.KeyFrames>
</DoubleAnimationUsingKeyFrames>
<!-- DoubleAnimationUsingKeyFrames with IsCumulative set to "False". The base value of each cycle
does not build on the last one. -->
<DoubleAnimationUsingKeyFrames
Storyboard.TargetName="withoutIsCumulativeUsingKeyFrames"
Storyboard.TargetProperty="Width"
RepeatBehavior="4x"
AutoReverse="True"
IsCumulative="False" >
<DoubleAnimationUsingKeyFrames.KeyFrames>
<LinearDoubleKeyFrame Value="100" KeyTime="0:0:0" />
<LinearDoubleKeyFrame Value="130" KeyTime="0:0:1" />
<SplineDoubleKeyFrame KeySpline="0.6,0.0 0.9,0.00" Value="200" KeyTime="0:0:3" />
</DoubleAnimationUsingKeyFrames.KeyFrames>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
</StackPanel>
</Page>
참고 항목
.NET Desktop feedback