DiscreteColorKeyFrame Class
Assembly: PresentationCore (in presentationcore.dll)
XML Namespace: http://schemas.microsoft.com/winfx/2006/xaml/presentation
This class is used as part of a ColorKeyFrameCollection in conjunction with a ColorAnimationUsingKeyFrames to animate a Color property value along a set of key frames.
A key frame defines a segment of the ColorAnimationUsingKeyFrames to which it belongs. Each key frame has a target Value and a KeyTime. The KeyTime specifies the time at which the key frame's Value should be reached. A key frame animates from the target value of the previous key frame to its own target value. It starts when the previous key frame ends and ends when its own key time is reached.
Discrete key frames like DiscreteColorKeyFrame create sudden "jumps" between values (no Interpolation). In other words, the animated property does not change until the key frame's key time is reached at which point the animated property goes suddenly to the target value.
This example shows how to animate the Color of a SolidColorBrush by using key frames.
The following example uses the ColorAnimationUsingKeyFrames class to animate the Color property of a SolidColorBrush. This animation uses three key frames in the following manner:
-
During the first two seconds, uses an instance of the LinearColorKeyFrame class to gradually change the color from green to red. Linear key frames like LinearColorKeyFrame create a smooth linear transition between values.
-
During the end of the next half second, uses an instance of the DiscreteColorKeyFrame class to quickly change the color from red to yellow. Discrete key frames like DiscreteColorKeyFrame create sudden changes between values, that is, the color change in this part of the animation occurs quickly and is not subtle.
-
During the final two seconds, uses an instance of the SplineColorKeyFrame class to change the color again—this time from yellow back to green. Spline key frames like SplineColorKeyFrame create a variable transition between values according to the values of the KeySpline property. In this example, the change in color begins slowly and speeds up exponentially toward the end of the time segment.
using System; using System.Windows; using System.Windows.Controls; using System.Windows.Shapes; using System.Windows.Media.Animation; using System.Windows.Media; namespace Microsoft.Samples.KeyFrameExamples { public class ColorAnimationUsingKeyFramesExample : Page { public ColorAnimationUsingKeyFramesExample() { Title = "BooleanAnimationUsingKeyFrames Example"; Background = Brushes.White; Margin = new Thickness(20); // Create a NameScope for this page so that // Storyboards can be used. NameScope.SetNameScope(this, new NameScope()); StackPanel myStackPanel = new StackPanel(); myStackPanel.Orientation = Orientation.Vertical; myStackPanel.HorizontalAlignment = HorizontalAlignment.Center; // Create the Border that is the target of the animation. SolidColorBrush animatedBrush = new SolidColorBrush(); animatedBrush.Color = Color.FromArgb(255, 0, 255, 0); Border myBorder = new Border(); // Set the initial color of the border to green. myBorder.BorderBrush = animatedBrush; myBorder.BorderThickness = new Thickness(28); myBorder.Padding = new Thickness(20); myStackPanel.Children.Add(myBorder); // Create a TextBlock to host inside the Border. TextBlock myTextBlock = new TextBlock(); myTextBlock.Text = "This example shows how to use the ColorAnimationUsingKeyFrames" + " to create an animation on the BorderBrush property of a Border."; myBorder.Child = myTextBlock; // Assign the Brush a name so that // it can be targeted by a Storyboard. this.RegisterName( "AnimatedBrush", animatedBrush); // Create a ColorAnimationUsingKeyFrames to // animate the BorderBrush property of the Button. ColorAnimationUsingKeyFrames colorAnimation = new ColorAnimationUsingKeyFrames(); colorAnimation.Duration = TimeSpan.FromSeconds(6); // Create brushes to use as animation values. Color redColor = new Color(); redColor = Color.FromArgb(255, 255, 0, 0); Color yellowColor = new Color(); yellowColor = Color.FromArgb(255, 255, 255, 0); Color greenColor = new Color(); greenColor = Color.FromArgb(255, 0, 255, 0); // Go from green to red in the first 2 seconds. LinearColorKeyFrame creates // a smooth, linear animation between values. colorAnimation.KeyFrames.Add( new LinearColorKeyFrame( redColor, // Target value (KeyValue) KeyTime.FromTimeSpan(TimeSpan.FromSeconds(2.0))) // KeyTime ); // In the next half second, go to yellow. DiscreteColorKeyFrame creates a // sudden jump between values. colorAnimation.KeyFrames.Add( new DiscreteColorKeyFrame( yellowColor, // Target value (KeyValue) KeyTime.FromTimeSpan(TimeSpan.FromSeconds(2.5))) // KeyTime ); // In the final 2 seconds of the animation, go from yellow back to green. SplineColorKeyFrame // creates a variable transition between values depending on the KeySpline property. In this example, // the animation starts off slow but toward the end of the time segment, it speeds up exponentially. colorAnimation.KeyFrames.Add( new SplineColorKeyFrame( greenColor, // Target value (KeyValue) KeyTime.FromTimeSpan(TimeSpan.FromSeconds(4.5)), // KeyTime new KeySpline(0.6, 0.0, 0.9, 0.0) // KeySpline ) ); // Set the animation to repeat forever. colorAnimation.RepeatBehavior = RepeatBehavior.Forever; // Set the animation to target the Color property // of the object named "AnimatedBrush". Storyboard.SetTargetName(colorAnimation, "AnimatedBrush"); Storyboard.SetTargetProperty( colorAnimation, new PropertyPath(SolidColorBrush.ColorProperty)); // Create a storyboard to apply the animation. Storyboard myStoryboard = new Storyboard(); myStoryboard.Children.Add(colorAnimation); // Start the storyboard when the Border loads. myBorder.Loaded += delegate(object sender, RoutedEventArgs e) { myStoryboard.Begin(this); }; Content = myStackPanel; } } }
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="ThicknessAnimationUsingKeyFrames Example"> <StackPanel Orientation="Vertical" HorizontalAlignment="Center"> <Border Background="#99FFFFFF" BorderThickness="28" Margin="0,60,0,20" Padding="20" > <Border.BorderBrush> <SolidColorBrush x:Name="MyAnimatedBrush" Color="Green" /> </Border.BorderBrush> <Border.Triggers> <EventTrigger RoutedEvent="Border.Loaded"> <BeginStoryboard> <Storyboard> <!-- Animate from green to red using a linear key frame, from red to yellow using a discrete key frame, and from yellow back to green with a spline key frame. This animation repeats forever. --> <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="Color" Storyboard.TargetName="MyAnimatedBrush" Duration="0:0:6" FillBehavior="HoldEnd" RepeatBehavior="Forever"> <ColorAnimationUsingKeyFrames.KeyFrames> <!-- Go from green to red in the first 2 seconds. LinearColorKeyFrame creates a smooth, linear animation between values. --> <LinearColorKeyFrame Value="Red" KeyTime="0:0:2" /> <!-- In the next half second, go to yellow. DiscreteColorKeyFrame creates a sudden jump between values. --> <DiscreteColorKeyFrame Value="Yellow" KeyTime="0:0:2.5" /> <!-- In the final 2 seconds of the animation, go from yellow back to green. SplineColorKeyFrame creates a variable transition between values depending on the KeySpline property. In this example, the animation starts off slow but toward the end of the time segment, it speeds up exponentially.--> <SplineColorKeyFrame Value="Green" KeyTime="0:0:4.5" KeySpline="0.6,0.0 0.9,0.00" /> </ColorAnimationUsingKeyFrames.KeyFrames> </ColorAnimationUsingKeyFrames> </Storyboard> </BeginStoryboard> </EventTrigger> </Border.Triggers> <TextBlock> This example shows how to use the ColorAnimationUsingKeyFrames to create an animation on the BorderBrush property of a Border. </TextBlock> </Border> </StackPanel> </Page>
For the complete sample, see KeyFrame Animation Sample.
System.Windows.Threading.DispatcherObject
System.Windows.DependencyObject
System.Windows.Freezable
System.Windows.Media.Animation.ColorKeyFrame
System.Windows.Media.Animation.DiscreteColorKeyFrame
Windows 98, Windows Server 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
The Microsoft .NET Framework 3.0 is supported on Windows Vista, Microsoft Windows XP SP2, and Windows Server 2003 SP1.