Nasıl yapılır: Yineleme Döngüleri Sırasında Animasyon Değerlerini Toplama
Bu örnekte, yinelenen döngülerde animasyon değerlerini biriktirmek için IsCumulative özelliğinin nasıl kullanılacağı gösterilmektedir.
Örnek
Yinelenen döngüler arasında animasyonun temel değerlerini biriktirmek için IsCumulative özelliğini kullanın. Örneğin, bir animasyonu 9 kez (RepeatBehavior = "9x") yinelemek üzere ayarlarsanız ve özelliği 10 ile 15 arasında animasyon oluşturacak şekilde ayarlarsanız (From = 10 To = 15), birinci döngü sırasında 10 ile 15 arasında, ikinci döngüde 15 ile 20 arasında, üçüncü döngüde 20 ile 25 arasında vb. özellik animasyonu oluşturur. Bu nedenle, her animasyon döngüsü temel değeri olarak önceki animasyon döngüsünden bitiş animasyon değerini kullanır.
IsCumulative
özelliğini en temel animasyonlar ve çoğu anahtar çerçeve animasyonu ile kullanabilirsiniz. Daha fazla bilgi için bkz. Animasyona Genel Bakış ve Key-Frame Animasyonlara Genel Bakış.
Aşağıdaki örnekte, dört dikdörtgenin genişliğine animasyon ekleyerek bu davranış gösterilmektedir. Örnek:
DoubleAnimation ile ilk dikdörtgene animasyon ekler ve IsCumulative özelliğini
true
olarak ayarlar.İkinci dikdörtgene DoubleAnimation animasyon ekler ve IsCumulative özelliğini varsayılan
false
değerine ayarlar.üçüncü dikdörtgene DoubleAnimationUsingKeyFrames animasyon ekler ve IsCumulative özelliğini
true
olarak ayarlar.son dikdörtgene DoubleAnimationUsingKeyFrames animasyon ekler ve IsCumulative özelliğini
false
olarak ayarlar.
<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>
Ayrıca bkz.
.NET Desktop feedback