Export (0) Print
Expand All

Storyboard.Seek Method (FrameworkContentElement, TimeSpan, TimeSeekOrigin)

Seeks this Storyboard to the specified position. The Storyboard performs the requested seek when the next clock tick occurs.

Namespace:  System.Windows.Media.Animation
Assembly:  PresentationFramework (in PresentationFramework.dll)

'Declaration
Public Sub Seek ( _
	containingObject As FrameworkContentElement, _
	offset As TimeSpan, _
	origin As TimeSeekOrigin _
)

Parameters

containingObject
Type: System.Windows.FrameworkContentElement

The object specified when the Begin(FrameworkContentElement, Boolean) method was called. This object contains the Clock objects that were created for this storyboard and its children.

offset
Type: System.TimeSpan

A positive or negative value that describes the amount by which the timeline should move forward or backward from the specified origin.

origin
Type: System.Windows.Media.Animation.TimeSeekOrigin

The position from which offset is applied.

Note that seek operations do not take the storyboard's SpeedRatio or SlipBehavior settings into account. The storyboard is treated as though it has a SpeedRatio of 1 and no SlipBehavior.

This method changes the storyboard clock's CurrentState to Active. This method has no effect on the timing tree until the next time a tick is processed. As a side-effect, the appropriate events are also not raised until then.

To interactively control this storyboard, you must use the same containingObject parameter when calling the interactive methods that you used to begin the storyboard. A controllable storyboard can pause, resume, seek, stop, and be removed. To make a storyboard controllable in code, you must use the appropriate overload of the storyboard's Begin method and specify true to make it controllable. For an example, see How to: Control a Storyboard After It Starts.

Seeking a storyboard triggers the CurrentGlobalSpeedInvalidated and CurrentStateInvalidated events.

The following example shows both the Seek and SeekAlignedToLastTick methods.

'
'    This example shows how to control
'    a storyboard after it has started.
'
'


Imports System
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Media
Imports System.Windows.Shapes
Imports System.Windows.Media.Animation
Imports System.Windows.Documents



Namespace Microsoft.Samples.Animation.AnimatingWithStoryboards
	Partial Public Class FrameworkContentElementSeekExample
		Inherits FlowDocument

		Private myStoryboard As Storyboard
		Private currentTimeIndicator As TextBlock
		Private seekDestination As TextBox
		Private rectangleWidthIndicator As TextBlock
		Private myRectangle As Rectangle

		Public Sub New()

			' Create a name scope for the page.
			NameScope.SetNameScope(Me, New NameScope())

			Me.Background = Brushes.White

			Dim controlsContainer As New BlockUIContainer()

			Dim myStackPanel As New StackPanel()
			myStackPanel.Margin = New Thickness(20)

			' Create a rectangle.
			myRectangle = New Rectangle()
			myRectangle.Width = 100
			myRectangle.Height = 20
			myRectangle.Margin = New Thickness(12,0,0,5)
			myRectangle.Fill = New SolidColorBrush(Color.FromArgb(170, 51, 51, 255))
			myRectangle.HorizontalAlignment = HorizontalAlignment.Left
			myStackPanel.Children.Add(myRectangle)

			' Assign the rectangle a name by 
			' registering it with the page, so that
			' it can be targeted by storyboard
			' animations.
			Me.RegisterName("myRectangle", myRectangle)

			'
			' Create an animation and a storyboard to animate the
			' rectangle.
			'
			Dim myDoubleAnimation As New DoubleAnimation(100, 500, New Duration(TimeSpan.FromSeconds(60)))
			Storyboard.SetTargetName(myDoubleAnimation, "myRectangle")
			Storyboard.SetTargetProperty(myDoubleAnimation, New PropertyPath(Rectangle.WidthProperty))
			myStoryboard = New Storyboard()
			myStoryboard.Children.Add(myDoubleAnimation)

			'
			' Create some buttons to control the storyboard
			' and a panel to contain them.
			'
			Dim buttonPanel As New StackPanel()
			Dim beginButton As New Button()
			beginButton.Content = "Begin"
			AddHandler beginButton.Click, AddressOf beginButton_Clicked
			buttonPanel.Children.Add(beginButton)
			Dim pauseButton As New Button()
			pauseButton.Content = "Pause"
			AddHandler pauseButton.Click, AddressOf pauseButton_Clicked
			buttonPanel.Children.Add(pauseButton)
			Dim resumeButton As New Button()
			resumeButton.Content = "Resume"
			AddHandler resumeButton.Click, AddressOf resumeButton_Clicked
			buttonPanel.Children.Add(resumeButton)
			Dim skipToFillButton As New Button()
			skipToFillButton.Content = "Skip to Fill"
			AddHandler skipToFillButton.Click, AddressOf skipToFillButton_Clicked
			buttonPanel.Children.Add(skipToFillButton)
			Dim setSpeedRatioButton As New Button()
			setSpeedRatioButton.Content = "Triple Speed"
			AddHandler setSpeedRatioButton.Click, AddressOf setSpeedRatioButton_Clicked
			buttonPanel.Children.Add(setSpeedRatioButton)
			Dim stopButton As New Button()
			stopButton.Content = "Stop"
			AddHandler stopButton.Click, AddressOf stopButton_Clicked
			buttonPanel.Children.Add(stopButton)
			Dim removeButton As New Button()
			removeButton.Content = "Remove"
			AddHandler removeButton.Click, AddressOf removeButton_Clicked
			buttonPanel.Children.Add(removeButton)

			myStackPanel.Children.Add(buttonPanel)

			' Create some controls to display the
			' storyboard's current time and the
			' current width of the rectangle.
			Dim seekPanel As New StackPanel()
			seekPanel.Margin = New Thickness(10)
			Dim aPanel As New StackPanel()
			Dim aLabel As New Label()
			aPanel.Orientation = Orientation.Horizontal
			aLabel.Content = "Current Time: "
			aPanel.Children.Add(aLabel)
			currentTimeIndicator = New TextBlock()
			aPanel.Children.Add(currentTimeIndicator)
			seekPanel.Children.Add(aPanel)

			aPanel = New StackPanel()
			aPanel.Orientation = Orientation.Horizontal
			aLabel = New Label()
			aLabel.Content = "Rectangle Width: "
			aPanel.Children.Add(aLabel)
			rectangleWidthIndicator = New TextBlock()
			rectangleWidthIndicator.Text = myRectangle.Width.ToString()
			aPanel.Children.Add(rectangleWidthIndicator)
			seekPanel.Children.Add(aPanel)


			' Create some controls to enable the
			' user to specify a seek position.

			aPanel = New StackPanel()
			aPanel.Orientation = Orientation.Horizontal
			aLabel = New Label()
			aLabel.Content = "Seek Offset: "
			aPanel.Children.Add(aLabel)
			seekDestination = New TextBox()
			seekDestination.Text = "0"
			aPanel.Children.Add(seekDestination)
			seekPanel.Children.Add(aPanel)


			Dim seekButton As New Button()
			seekButton.Content = "Seek"
			AddHandler seekButton.Click, AddressOf seekButton_Clicked
			seekPanel.Children.Add(seekButton)
			Dim seekAlignedToLastTickButton As New Button()
			seekAlignedToLastTickButton.Content = "Seek Aligned to Last Tick"
			AddHandler seekAlignedToLastTickButton.Click, AddressOf seekAlignedToLastTickButton_Clicked
			seekPanel.Children.Add(seekAlignedToLastTickButton)

			myStackPanel.Children.Add(seekPanel)

			controlsContainer.Child = myStackPanel
			Me.Blocks.Add(controlsContainer)

			AddHandler myStoryboard.CurrentTimeInvalidated, AddressOf myStoryboard_CurrentTimeInvalidated
		End Sub

		' Begins the storyboard.
		Private Sub beginButton_Clicked(ByVal sender As Object, ByVal args As RoutedEventArgs)
			' Specifying "true" as the second Begin parameter
			' makes this storyboard controllable.
			myStoryboard.Begin(Me, True)

		End Sub

		' Pauses the storyboard.
		Private Sub pauseButton_Clicked(ByVal sender As Object, ByVal args As RoutedEventArgs)
			 myStoryboard.Pause(Me)

		End Sub

		' Resumes the storyboard.
		Private Sub resumeButton_Clicked(ByVal sender As Object, ByVal args As RoutedEventArgs)
			 myStoryboard.Resume(Me)

		End Sub

		' Advances the storyboard to its fill period.
		Private Sub skipToFillButton_Clicked(ByVal sender As Object, ByVal args As RoutedEventArgs)
			 myStoryboard.SkipToFill(Me)

		End Sub

		' Updates the storyboard's speed.
		Private Sub setSpeedRatioButton_Clicked(ByVal sender As Object, ByVal args As RoutedEventArgs)
			' Makes the storyboard progress three times as fast as normal.
			myStoryboard.SetSpeedRatio(Me, 3)

		End Sub

		' Stops the storyboard.
		Private Sub stopButton_Clicked(ByVal sender As Object, ByVal args As RoutedEventArgs)
			 myStoryboard.Stop(Me)

		End Sub

		' Removes the storyboard.
		Private Sub removeButton_Clicked(ByVal sender As Object, ByVal args As RoutedEventArgs)
			 myStoryboard.Remove(Me)

		End Sub

		Private Sub seekButton_Clicked(ByVal sender As Object, ByVal args As RoutedEventArgs)
			Try


				Dim seekTime As TimeSpan = TimeSpan.Parse(seekDestination.Text)
				myStoryboard.Seek(Me, seekTime, TimeSeekOrigin.BeginTime)

				' The rectangle width will probably not be at its new
				' value when this call is made, because the storyboard's
				' clock probably hasn't ticked yet.
				rectangleWidthIndicator.Text = myRectangle.Width.ToString()

			Catch ex As FormatException
				MessageBox.Show("Invalid TimeSpan value.")
				seekDestination.Focus()
			End Try
		End Sub

		Private Sub seekAlignedToLastTickButton_Clicked(ByVal sender As Object, ByVal args As RoutedEventArgs)

			Try


				Dim seekTime As TimeSpan = TimeSpan.Parse(seekDestination.Text)
				myStoryboard.SeekAlignedToLastTick(Me, seekTime, TimeSeekOrigin.BeginTime)

				' The rectangle width will be at its new
				' value when this call is made, because SeekAlignedToLastTick 
				' operation immediately updates timeline and animation
				' values.          
				rectangleWidthIndicator.Text = myRectangle.Width.ToString()

			Catch ex As FormatException
				MessageBox.Show("Invalid TimeSpan value.")
				seekDestination.Focus()
			End Try
		End Sub

		Private Sub myStoryboard_CurrentTimeInvalidated(ByVal sender As Object, ByVal e As EventArgs)

			currentTimeIndicator.Text = myStoryboard.GetCurrentTime(Me).ToString()

		End Sub



	End Class
End Namespace

.NET Framework

Supported in: 4.5, 4, 3.5, 3.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Show:
© 2014 Microsoft