Occurs when this timeline has completely finished playing: it will no longer enter its active period.
Public Event Completed As EventHandler
public event EventHandler Completed
public: event EventHandler^ Completed { void add (EventHandler^ value); void remove (EventHandler^ value); }
member Completed : IEvent<EventHandler, EventArgs>
<object Completed="EventHandler" .../>
If this timeline is the root timeline of a timeline tree, it has completed playing after it reaches the end of its active period (which includes repeats) and all its children have reached the end of their active periods. If this timeline is a child timeline, it is considered to have completely finished playing when the root timeline of the timeline tree to which it belongs reaches the end of its active period and all its child timelines have finished playing.
Stopping a timeline does not trigger its completed event, but skipping it to its fill period does.
The Object parameter of the EventHandler event handler is the timeline's Clock.
Although this event handler appears to be associated with a timeline, it actually registers with the Clock created for this timeline. For more information, see the Timing Events Overview.
In the following example, two Storyboard objects are used to create an animation transition between two images, stored using ImageSource objects and displayed using an Image control. One storyboard shrinks the image control until it disappears. After it completes, the old ImageSource is swapped with the other ImageSource, and a second storyboard that expands the image control until it is full-sized again.
<!-- TimelineCompletedExample.xaml This example creates an animated transition between two images. When the user clicks the Start Transition button, a storyboard shrinks an image until it disappears. The Completed event is used to notify the class when this storyboard has completed. The code behind file handles this event by swapping the image and making it visible again. --> <Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="SDKSample.TimelineCompletedExample" WindowTitle="Timeline Completed Example" Loaded="exampleLoaded"> <Page.Resources> <!-- A simple picture of a rectangle. --> <DrawingImage x:Key="RectangleDrawingImage"> <DrawingImage.Drawing> <DrawingGroup> <GeometryDrawing Brush="White"> <GeometryDrawing.Geometry> <RectangleGeometry Rect="0,0,100,100" /> </GeometryDrawing.Geometry> </GeometryDrawing> <GeometryDrawing Brush="Orange"> <GeometryDrawing.Geometry> <RectangleGeometry Rect="25,25,50,50" /> </GeometryDrawing.Geometry> </GeometryDrawing> </DrawingGroup> </DrawingImage.Drawing> </DrawingImage> <!-- A simple picture of a cirlce. --> <DrawingImage x:Key="CircleDrawingImage"> <DrawingImage.Drawing> <DrawingGroup> <GeometryDrawing Brush="White"> <GeometryDrawing.Geometry> <RectangleGeometry Rect="0,0,100,100" /> </GeometryDrawing.Geometry> </GeometryDrawing> <GeometryDrawing> <GeometryDrawing.Geometry> <EllipseGeometry Center="50,50" RadiusX="25" RadiusY="25" /> </GeometryDrawing.Geometry> <GeometryDrawing.Brush> <RadialGradientBrush GradientOrigin="0.75,0.25" Center="0.75,0.25"> <GradientStop Offset="0.0" Color="White" /> <GradientStop Offset="1.0" Color="LimeGreen" /> </RadialGradientBrush> </GeometryDrawing.Brush> </GeometryDrawing> </DrawingGroup> </DrawingImage.Drawing> </DrawingImage> <!-- Define the storyboard that enlarges the image. This storyboard is applied using code when ZoomOutStoryboard completes. --> <Storyboard x:Key="ZoomInStoryboardResource"> <DoubleAnimation Storyboard.TargetName="AnimatedImageScaleTranform" Storyboard.TargetProperty="ScaleX" Duration="0:0:5" To="1" /> <DoubleAnimation Storyboard.TargetName="AnimatedImageScaleTranform" Storyboard.TargetProperty="ScaleY" Duration="0:0:5" To="1" /> </Storyboard> </Page.Resources> <StackPanel Margin="20" > <Border BorderBrush="Gray" BorderThickness="2" HorizontalAlignment="Center" VerticalAlignment="Center"> <!-- Displays the current ImageSource. --> <Image Name="AnimatedImage" Width="200" Height="200" RenderTransformOrigin="0.5,0.5"> <Image.RenderTransform> <ScaleTransform x:Name="AnimatedImageScaleTranform" ScaleX="1" ScaleY="1" /> </Image.RenderTransform> </Image> </Border> <!-- This StackPanel contains buttons that control the storyboard. --> <StackPanel Orientation="Horizontal" Margin="0,30,0,0"> <Button Name="BeginButton">Start Transition</Button> <Button Name="SkipToFillButton">Skip To Fill</Button> <Button Name="StopButton">Stop</Button> <StackPanel.Triggers> <!-- Begin the storyboard that shrinks the image. After the storyboard completes, --> <EventTrigger RoutedEvent="Button.Click" SourceName="BeginButton"> <BeginStoryboard Name="ZoomOutBeginStoryboard"> <Storyboard x:Name="ZoomOutStoryboard" Completed="zoomOutStoryboardCompleted" FillBehavior="Stop"> <DoubleAnimation Storyboard.TargetName="AnimatedImageScaleTranform" Storyboard.TargetProperty="ScaleX" Duration="0:0:5" To="0" FillBehavior="Stop" /> <DoubleAnimation Storyboard.TargetName="AnimatedImageScaleTranform" Storyboard.TargetProperty="ScaleY" Duration="0:0:5" To="0" FillBehavior="Stop" /> </Storyboard> </BeginStoryboard> </EventTrigger> <!-- Advances ZoomOutStoryboard to its fill period. This action triggers the Completed event. --> <EventTrigger RoutedEvent="Button.Click" SourceName="SkipToFillButton"> <SkipStoryboardToFill BeginStoryboardName="ZoomOutBeginStoryboard" /> </EventTrigger> <!-- Stops the storyboard. This action does not trigger the completed event. --> <EventTrigger RoutedEvent="Button.Click" SourceName="StopButton"> <StopStoryboard BeginStoryboardName="ZoomOutBeginStoryboard" /> </EventTrigger> </StackPanel.Triggers> </StackPanel> </StackPanel> </Page>
' TimelineCompletedExample.xaml.vb ' Handles the ZoomOutStoryboard's Completed event. ' See the TimelienCompletedExample.xaml file ' for the markup that creates the images and storyboards. Imports System Imports System.Windows Imports System.Windows.Controls Imports System.Windows.Media Imports System.Windows.Media.Animation Imports System.Windows.Navigation Namespace SDKSample Partial Public Class TimelineCompletedExample Inherits Page Private zoomInStoryboard As Storyboard Private currentImageSource As ImageSource Private nextImageSource As ImageSource Public Sub New() InitializeComponent() End Sub Private Sub exampleLoaded(ByVal sender As Object, ByVal e As RoutedEventArgs) ' Cache the zoom-out storyboard resource. zoomInStoryboard = CType(Me.Resources("ZoomInStoryboardResource"), Storyboard) ' Cache the ImageSource resources. currentImageSource = CType(Me.Resources("RectangleDrawingImage"), ImageSource) nextImageSource = CType(Me.Resources("CircleDrawingImage"), ImageSource) ' Display the current image source. AnimatedImage.Source = currentImageSource End Sub ' Handles the zoom-out storyboard's completed event. Private Sub zoomOutStoryboardCompleted(ByVal sender As Object, ByVal e As EventArgs) AnimatedImage.Source = nextImageSource nextImageSource = currentImageSource currentImageSource = AnimatedImage.Source zoomInStoryboard.Begin(AnimatedImage, HandoffBehavior.SnapshotAndReplace) End Sub End Class End Namespace
// TimelineCompletedExample.xaml.cs // Handles the ZoomOutStoryboard's Completed event. // See the TimelienCompletedExample.xaml file // for the markup that creates the images and storyboards. using System; using System.Windows; using System.Windows.Controls; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Navigation; namespace SDKSample { public partial class TimelineCompletedExample : Page { private Storyboard zoomInStoryboard; private ImageSource currentImageSource; private ImageSource nextImageSource; public TimelineCompletedExample() { InitializeComponent(); } private void exampleLoaded(object sender, RoutedEventArgs e) { // Cache the zoom-out storyboard resource. zoomInStoryboard = (Storyboard) this.Resources["ZoomInStoryboardResource"]; // Cache the ImageSource resources. currentImageSource = (ImageSource) this.Resources["RectangleDrawingImage"]; nextImageSource = (ImageSource) this.Resources["CircleDrawingImage"]; // Display the current image source. AnimatedImage.Source = currentImageSource; } // Handles the zoom-out storyboard's completed event. private void zoomOutStoryboardCompleted(object sender, EventArgs e) { AnimatedImage.Source = nextImageSource; nextImageSource = currentImageSource; currentImageSource = AnimatedImage.Source; zoomInStoryboard.Begin(AnimatedImage, HandoffBehavior.SnapshotAndReplace); } } }
Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2