Windows apps
Collapse the table of content
Expand the table of content
Information
The topic you requested is included in another documentation set. For convenience, it's displayed below. Choose Switch to see the topic in its original location.

ClockController Class

Interactively controls a Clock.

System.Object
  System.Windows.Threading.DispatcherObject
    System.Windows.Media.Animation.ClockController

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

'Declaration
Public NotInheritable Class ClockController _
	Inherits DispatcherObject

The ClockController type exposes the following members.

  NameDescription
Public propertyClockGets the Clock controlled by this ClockController.
Public propertyDispatcherGets the Dispatcher this DispatcherObject is associated with. (Inherited from DispatcherObject.)
Public propertySpeedRatioGets or sets the interactive speed of the target Clock.
Top

  NameDescription
Public methodBeginSets the target Clock to begin at the next tick.
Public methodCheckAccessDetermines whether the calling thread has access to this DispatcherObject. (Inherited from DispatcherObject.)
Public methodEquals(Object)Determines whether the specified Object is equal to the current Object. (Inherited from Object.)
Protected methodFinalizeAllows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from Object.)
Public methodGetHashCodeServes as a hash function for a particular type. (Inherited from Object.)
Public methodGetTypeGets the Type of the current instance. (Inherited from Object.)
Protected methodMemberwiseCloneCreates a shallow copy of the current Object. (Inherited from Object.)
Public methodPauseStops the target Clock from progressing.
Public methodRemoveRemoves the Clock associated with this ClockController from the properties it animates. The clock and its child clocks will no longer affect these properties.
Public methodResumeEnables a Clock that was previously paused to resume progressing.
Public methodSeekSeeks the target Clock by the specified amount when the next tick occurs. If the target clock is stopped, seeking makes it active again.
Public methodSeekAlignedToLastTickSeeks the target Clock by the specified amount immediately. If the target clock is stopped, seeking makes it active again.
Public methodSkipToFillAdvances the current time of the target Clock to the end of its active period.
Public methodStopStops the target Clock.
Public methodToStringReturns a string that represents the current object. (Inherited from Object.)
Public methodVerifyAccessEnforces that the calling thread has access to this DispatcherObject. (Inherited from DispatcherObject.)
Top

Use a ClockController to interactively begin, pause, resume, seek, skip, stop, and remove a Clock. You can only interactively control root-level clocks.

A Clock object's ClockController property enables you to interactively start, pause, resume, seek, advance the clock to its fill period, and stop the clock. Only the root clock of a timing tree can be interactively controlled.

NoteNote

There are other ways to interactively control animations that don't require you to work directly with clocks: you can also use Storyboards. Storyboards are supported in both markup and code. For an example, see How to: Animate a Property by Using a Storyboard or the Animation Overview.

In the following example, several buttons are used to interactively control an animation clock.


'
'  This example shows how to interactively control 
'  a root clock.
'

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

Namespace Microsoft.Samples.Animation.TimingBehaviors
	Public Class ClockControllerExample
		Inherits Page

		Private myControllableClock As AnimationClock
		Private seekButton As Button
		Private seekAmountTextBox As TextBox
		Private timeSeekOriginListBox As ListBox

		Public Sub New()
			Dim mainPanel As New StackPanel()

			' Create a rectangle to animate.
			Dim animatedRectangle As New Rectangle()
			animatedRectangle.Width = 100
			animatedRectangle.Height = 100
			animatedRectangle.Fill = Brushes.Orange
			mainPanel.Children.Add(animatedRectangle)

			' Create a DoubleAnimation to
			' animate its width.
			Dim widthAnimation As New DoubleAnimation(100, 500, New Duration(TimeSpan.FromSeconds(5)))

			' Create a clock from the animation.
			myControllableClock = widthAnimation.CreateClock()

			' Apply the clock to the rectangle's Width property.
			animatedRectangle.ApplyAnimationClock(Rectangle.WidthProperty, myControllableClock)
			myControllableClock.Controller.Stop()

			'
			' Create some buttons to control the clock.
			'

			' Create a button to begin the clock.
			Dim beginButton As New Button()
			beginButton.Content = "Begin"
			AddHandler beginButton.Click, AddressOf beginButton_Clicked
			mainPanel.Children.Add(beginButton)

			' Create a button to pause the clock. 
			Dim pauseButton As New Button()
			pauseButton.Content = "Pause"
			AddHandler pauseButton.Click, AddressOf pauseButton_Clicked
			mainPanel.Children.Add(pauseButton)

			' Create a button to resume the clock. 
			Dim resumeButton As New Button()
			resumeButton.Content = "Resume"
			AddHandler resumeButton.Click, AddressOf resumeButton_Clicked
			mainPanel.Children.Add(resumeButton)

			' Create a button to advance the clock to
			' its fill period. 
			Dim skipToFillButton As New Button()
			skipToFillButton.Content = "Skip to Fill"
			AddHandler skipToFillButton.Click, AddressOf skipToFillButton_Clicked
			mainPanel.Children.Add(skipToFillButton)

			' Create a button to stop the clock.
			Dim stopButton As New Button()
			stopButton.Content = "Stop"
			AddHandler stopButton.Click, AddressOf stopButton_Clicked
			mainPanel.Children.Add(stopButton)

			'
			' Create some controls the enable the user to
			' seek the clock. 
			'

			Dim seekDetailsPanel As New StackPanel()
			seekDetailsPanel.Margin = New Thickness(0,20,0,20)
			seekDetailsPanel.Orientation = Orientation.Horizontal
			Dim seekAmountLabel As New Label()
			seekAmountLabel.Content = "Seek amount:"
			seekDetailsPanel.Children.Add(seekAmountLabel)

			' Create a text box so that the user can
			' specify the amount by which to seek.
			seekAmountTextBox = New TextBox()
			seekAmountTextBox.Text = "0:0:1"
			seekAmountTextBox.VerticalAlignment = VerticalAlignment.Top
			AddHandler seekAmountTextBox.TextChanged, AddressOf seekAmountTextBox_TextChanged
			seekDetailsPanel.Children.Add(seekAmountTextBox)

			Dim timeSeekOriginLabel As New Label()
			timeSeekOriginLabel.Content = "Seek Origin:"
			seekDetailsPanel.Children.Add(timeSeekOriginLabel)

			' Create a ListBox so the user can
			' select whether the seek time is relative
			' to the clock's BeginTime or Duration.
			timeSeekOriginListBox = New ListBox()
			timeSeekOriginListBox.Items.Add("BeginTime")
			timeSeekOriginListBox.Items.Add("Duration")
			timeSeekOriginListBox.Padding = New Thickness(5)
			timeSeekOriginListBox.SelectedIndex = 0
			seekDetailsPanel.Children.Add(timeSeekOriginListBox)

			' Create a button to seek the clock.
			seekButton = New Button()
			seekButton.Content = "Seek"
			AddHandler seekButton.Click, AddressOf seekButton_Clicked
			seekDetailsPanel.Children.Add(seekButton)
			mainPanel.Children.Add(seekDetailsPanel)

			Me.Content = mainPanel
		End Sub

		' Starts the clock.
		Private Sub beginButton_Clicked(ByVal sender As Object, ByVal e As RoutedEventArgs)
			myControllableClock.Controller.Begin()
		End Sub

		' Pauses the clock.
		Private Sub pauseButton_Clicked(ByVal sender As Object, ByVal e As RoutedEventArgs)
			myControllableClock.Controller.Pause()
		End Sub

		' Resumes the clock.
		Private Sub resumeButton_Clicked(ByVal sender As Object, ByVal e As RoutedEventArgs)
			myControllableClock.Controller.Resume()
		End Sub

		' Adances the clock to its fill period.
		Private Sub skipToFillButton_Clicked(ByVal sender As Object, ByVal e As RoutedEventArgs)
			myControllableClock.Controller.SkipToFill()
		End Sub

		' Stops the clock.
		Private Sub stopButton_Clicked(ByVal sender As Object, ByVal e As RoutedEventArgs)
			myControllableClock.Controller.Stop()
		End Sub

		' Seeks the clock.
		Private Sub seekButton_Clicked(ByVal sender As Object, ByVal e As RoutedEventArgs)


			Try

				' Obtain the seek amount from the seekAmountTextBox TextBox.
				Dim seekAmount As TimeSpan = TimeSpan.Parse(seekAmountTextBox.Text)

				' Determine the seek origin by reading the selected value
				' from the timeSeekOriginListBox ListBox.
				Dim selectedOrigin As TimeSeekOrigin = CType(System.Enum.Parse(GetType(TimeSeekOrigin), CStr(timeSeekOriginListBox.SelectedItem)), TimeSeekOrigin)

				' Seek to the specified location.
				myControllableClock.Controller.Seek(seekAmount, selectedOrigin)

			Catch formatEx As FormatException
				MessageBox.Show(seekAmountTextBox.Text & " is not a valid TimeSpan. Please enter another value.")

				' Disable the seek button until the user enters another value.
				seekButton.IsEnabled = False
			End Try
		End Sub

		' Verifies that seekAmountTextBox has text content.
		' If there is no text, disable the seek button.
		Private Sub seekAmountTextBox_TextChanged(ByVal sender As Object, ByVal e As TextChangedEventArgs)
			Dim theTextBox As TextBox = CType(e.Source, TextBox)
			If theTextBox.Text Is Nothing OrElse theTextBox.Text.Length < 1 Then
				seekButton.IsEnabled = False
			Else
				seekButton.IsEnabled = True
			End If


		End Sub

	End Class
End Namespace


.NET Framework

Supported in: 4, 3.5, 3.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

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

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

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Community Additions

Show:
© 2017 Microsoft