Storyboard.Seek Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Durchsucht das Storyboard bis zu der Position, an der das nächste Ticken der Uhr erfolgt.
Überlädt
Seek(TimeSpan) |
Durchsucht dieses Storyboard bis zur angegebenen Position. Das Storyboard führt die angeforderte Suche bei der nächsten Zeiteinheit aus. |
Seek(TimeSpan, TimeSeekOrigin) |
Durchsucht dieses Storyboard bis zur angegebenen Position. Das Storyboard führt die angeforderte Suche bei der nächsten Zeiteinheit aus. |
Seek(FrameworkContentElement, TimeSpan, TimeSeekOrigin) |
Durchsucht dieses Storyboard bis zur angegebenen Position. Das Storyboard führt die angeforderte Suche bei der nächsten Zeiteinheit aus. |
Seek(FrameworkElement, TimeSpan, TimeSeekOrigin) |
Durchsucht dieses Storyboard bis zur angegebenen Position. Das Storyboard führt die angeforderte Suche bei der nächsten Zeiteinheit aus. |
Seek(TimeSpan)
Durchsucht dieses Storyboard bis zur angegebenen Position. Das Storyboard führt die angeforderte Suche bei der nächsten Zeiteinheit aus.
public:
void Seek(TimeSpan offset);
public void Seek (TimeSpan offset);
member this.Seek : TimeSpan -> unit
Public Sub Seek (offset As TimeSpan)
Parameter
- offset
- TimeSpan
Ein positiver oder negativer Wert, der den Betrag angibt, um den die Zeitachse vorwärts oder rückwärts verschoben werden soll.
Hinweise
Beachten Sie, dass Suchvorgänge die Einstellungen oder SlipBehavior Einstellungen des Storyboards SpeedRatio nicht berücksichtigen. Das Storyboard wird so behandelt, als ob es eine SpeedRatio von 1 und keine SlipBehaviorhat.
Um dieses Storyboard interaktiv zu steuern, müssen Sie beim Aufrufen der interaktiven Methoden denselben containingObject
Parameter verwenden, den Sie zum Starten des Storyboards verwendet haben. Ein steuerbares Storyboard kann anhalten, fortsetzen, suchen, beenden und entfernt werden. Um ein Storyboard im Code steuerbar zu machen, müssen Sie die entsprechende Überladung der Methode des Storyboards Begin verwenden und angeben true
, um es steuerbar zu machen. Ein Beispiel finden Sie unter Vorgehensweise: Steuern eines Storyboards nach dem Start.
Gilt für:
Seek(TimeSpan, TimeSeekOrigin)
Durchsucht dieses Storyboard bis zur angegebenen Position. Das Storyboard führt die angeforderte Suche bei der nächsten Zeiteinheit aus.
public:
void Seek(TimeSpan offset, System::Windows::Media::Animation::TimeSeekOrigin origin);
public void Seek (TimeSpan offset, System.Windows.Media.Animation.TimeSeekOrigin origin);
member this.Seek : TimeSpan * System.Windows.Media.Animation.TimeSeekOrigin -> unit
Public Sub Seek (offset As TimeSpan, origin As TimeSeekOrigin)
Parameter
- offset
- TimeSpan
Ein positiver oder negativer Wert, der den Betrag angibt, um den die Zeitachse ab dem angegebenen origin
vorwärts oder rückwärts verschoben werden soll.
- origin
- TimeSeekOrigin
Die Position, ab der offset
angewendet wird.
Hinweise
Beachten Sie, dass Suchvorgänge die Einstellungen oder SlipBehavior Einstellungen des Storyboards SpeedRatio nicht berücksichtigen. Das Storyboard wird so behandelt, als ob es eine SpeedRatio von 1 und keine SlipBehaviorhat.
Um dieses Storyboard interaktiv zu steuern, müssen Sie beim Aufrufen der interaktiven Methoden denselben containingObject
Parameter verwenden, den Sie zum Starten des Storyboards verwendet haben. Ein steuerbares Storyboard kann anhalten, fortsetzen, suchen, beenden und entfernt werden. Um ein Storyboard im Code steuerbar zu machen, müssen Sie die entsprechende Überladung der Methode des Storyboards Begin verwenden und angeben true
, um es steuerbar zu machen. Ein Beispiel finden Sie unter Vorgehensweise: Steuern eines Storyboards nach dem Start.
Gilt für:
Seek(FrameworkContentElement, TimeSpan, TimeSeekOrigin)
Durchsucht dieses Storyboard bis zur angegebenen Position. Das Storyboard führt die angeforderte Suche bei der nächsten Zeiteinheit aus.
public:
void Seek(System::Windows::FrameworkContentElement ^ containingObject, TimeSpan offset, System::Windows::Media::Animation::TimeSeekOrigin origin);
public void Seek (System.Windows.FrameworkContentElement containingObject, TimeSpan offset, System.Windows.Media.Animation.TimeSeekOrigin origin);
member this.Seek : System.Windows.FrameworkContentElement * TimeSpan * System.Windows.Media.Animation.TimeSeekOrigin -> unit
Public Sub Seek (containingObject As FrameworkContentElement, offset As TimeSpan, origin As TimeSeekOrigin)
Parameter
- containingObject
- FrameworkContentElement
Das beim Aufrufen der Begin(FrameworkContentElement, Boolean)-Methode angegebene Objekt. Dieses Objekt enthält die Clock-Objekte, die für dieses Storyboard und seine untergeordneten Elemente erstellt wurden.
- offset
- TimeSpan
Ein positiver oder negativer Wert, der den Betrag angibt, um den die Zeitachse ab dem angegebenen origin
vorwärts oder rückwärts verschoben werden soll.
- origin
- TimeSeekOrigin
Die Position, ab der offset
angewendet wird.
Beispiele
Das folgende Beispiel zeigt sowohl die Seek Methoden als SeekAlignedToLastTick auch.
/*
This example shows how to control
a storyboard after it has started.
*/
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Shapes;
using System.Windows.Media.Animation;
using System.Windows.Documents;
namespace Microsoft.Samples.Animation.AnimatingWithStoryboards
{
public partial class FrameworkContentElementSeekExample : FlowDocument
{
private Storyboard myStoryboard;
private TextBlock currentTimeIndicator;
private TextBox seekDestination;
private TextBlock rectangleWidthIndicator;
private Rectangle myRectangle;
public FrameworkContentElementSeekExample()
{
// Create a name scope for the page.
NameScope.SetNameScope(this, new NameScope());
this.Background = Brushes.White;
BlockUIContainer controlsContainer = new BlockUIContainer();
StackPanel myStackPanel = 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.
this.RegisterName("myRectangle", myRectangle);
//
// Create an animation and a storyboard to animate the
// rectangle.
//
DoubleAnimation myDoubleAnimation =
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.
//
StackPanel buttonPanel = new StackPanel();
Button beginButton = new Button();
beginButton.Content = "Begin";
beginButton.Click += new RoutedEventHandler(beginButton_Clicked);
buttonPanel.Children.Add(beginButton);
Button pauseButton = new Button();
pauseButton.Content = "Pause";
pauseButton.Click +=new RoutedEventHandler(pauseButton_Clicked);
buttonPanel.Children.Add(pauseButton);
Button resumeButton = new Button();
resumeButton.Content = "Resume";
resumeButton.Click +=new RoutedEventHandler(resumeButton_Clicked);
buttonPanel.Children.Add(resumeButton);
Button skipToFillButton = new Button();
skipToFillButton.Content = "Skip to Fill";
skipToFillButton.Click +=new RoutedEventHandler(skipToFillButton_Clicked);
buttonPanel.Children.Add(skipToFillButton);
Button setSpeedRatioButton = new Button();
setSpeedRatioButton.Content = "Triple Speed";
setSpeedRatioButton.Click +=new RoutedEventHandler(setSpeedRatioButton_Clicked);
buttonPanel.Children.Add(setSpeedRatioButton);
Button stopButton = new Button();
stopButton.Content = "Stop";
stopButton.Click +=new RoutedEventHandler(stopButton_Clicked);
buttonPanel.Children.Add(stopButton);
Button removeButton = new Button();
removeButton.Content = "Remove";
removeButton.Click +=new RoutedEventHandler(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.
StackPanel seekPanel = new StackPanel();
seekPanel.Margin = new Thickness(10);
StackPanel aPanel = new StackPanel();
Label aLabel = 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);
Button seekButton = new Button();
seekButton.Content = "Seek";
seekButton.Click += new RoutedEventHandler(seekButton_Clicked);
seekPanel.Children.Add(seekButton);
Button seekAlignedToLastTickButton = new Button();
seekAlignedToLastTickButton.Content = "Seek Aligned to Last Tick";
seekAlignedToLastTickButton.Click += new RoutedEventHandler(seekAlignedToLastTickButton_Clicked);
seekPanel.Children.Add(seekAlignedToLastTickButton);
myStackPanel.Children.Add(seekPanel);
controlsContainer.Child = myStackPanel;
this.Blocks.Add(controlsContainer);
myStoryboard.CurrentTimeInvalidated += new EventHandler(myStoryboard_CurrentTimeInvalidated);
}
// Begins the storyboard.
private void beginButton_Clicked(object sender, RoutedEventArgs args)
{
// Specifying "true" as the second Begin parameter
// makes this storyboard controllable.
myStoryboard.Begin(this, true);
}
// Pauses the storyboard.
private void pauseButton_Clicked(object sender, RoutedEventArgs args)
{
myStoryboard.Pause(this);
}
// Resumes the storyboard.
private void resumeButton_Clicked(object sender, RoutedEventArgs args)
{
myStoryboard.Resume(this);
}
// Advances the storyboard to its fill period.
private void skipToFillButton_Clicked(object sender, RoutedEventArgs args)
{
myStoryboard.SkipToFill(this);
}
// Updates the storyboard's speed.
private void setSpeedRatioButton_Clicked(object sender, RoutedEventArgs args)
{
// Makes the storyboard progress three times as fast as normal.
myStoryboard.SetSpeedRatio(this, 3);
}
// Stops the storyboard.
private void stopButton_Clicked(object sender, RoutedEventArgs args)
{
myStoryboard.Stop(this);
}
// Removes the storyboard.
private void removeButton_Clicked(object sender, RoutedEventArgs args)
{
myStoryboard.Remove(this);
}
private void seekButton_Clicked(object sender, RoutedEventArgs args)
{
try {
TimeSpan seekTime = TimeSpan.Parse(seekDestination.Text);
myStoryboard.Seek(this, 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(FormatException ex)
{
MessageBox.Show("Invalid TimeSpan value.");
seekDestination.Focus();
}
}
private void seekAlignedToLastTickButton_Clicked(object sender, RoutedEventArgs args)
{
try {
TimeSpan seekTime = TimeSpan.Parse(seekDestination.Text);
myStoryboard.SeekAlignedToLastTick(this, 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(FormatException ex)
{
MessageBox.Show("Invalid TimeSpan value.");
seekDestination.Focus();
}
}
private void myStoryboard_CurrentTimeInvalidated(object sender, EventArgs e)
{
currentTimeIndicator.Text = myStoryboard.GetCurrentTime(this).ToString();
}
}
}
'
' This example shows how to control
' a storyboard after it has started.
'
'
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
Hinweise
Beachten Sie, dass Suchvorgänge die Einstellungen oder SlipBehavior Einstellungen des Storyboards SpeedRatio nicht berücksichtigen. Das Storyboard wird so behandelt, als ob es eine SpeedRatio von 1 und keine SlipBehaviorhat.
Diese Methode ändert die Storyboarduhr CurrentState in Active. Diese Methode hat keine Auswirkungen auf die Zeitsteuerungsstruktur, bis das nächste Mal ein Häkchen verarbeitet wird. Als Nebeneffekt werden die entsprechenden Ereignisse auch erst dann ausgelöst.
Um dieses Storyboard interaktiv zu steuern, müssen Sie beim Aufrufen der interaktiven Methoden denselben containingObject
Parameter verwenden, den Sie zum Starten des Storyboards verwendet haben. Ein steuerbares Storyboard kann anhalten, fortsetzen, suchen, beenden und entfernt werden. Um ein Storyboard im Code steuerbar zu machen, müssen Sie die entsprechende Überladung der Methode des Storyboards Begin verwenden und angeben true
, um es steuerbar zu machen. Ein Beispiel finden Sie unter Vorgehensweise: Steuern eines Storyboards nach dem Start.
Die Suche nach einem Storyboard löst die CurrentGlobalSpeedInvalidated Ereignisse und CurrentStateInvalidated aus.
Gilt für:
Seek(FrameworkElement, TimeSpan, TimeSeekOrigin)
Durchsucht dieses Storyboard bis zur angegebenen Position. Das Storyboard führt die angeforderte Suche bei der nächsten Zeiteinheit aus.
public:
void Seek(System::Windows::FrameworkElement ^ containingObject, TimeSpan offset, System::Windows::Media::Animation::TimeSeekOrigin origin);
public void Seek (System.Windows.FrameworkElement containingObject, TimeSpan offset, System.Windows.Media.Animation.TimeSeekOrigin origin);
member this.Seek : System.Windows.FrameworkElement * TimeSpan * System.Windows.Media.Animation.TimeSeekOrigin -> unit
Public Sub Seek (containingObject As FrameworkElement, offset As TimeSpan, origin As TimeSeekOrigin)
Parameter
- containingObject
- FrameworkElement
Das beim Aufrufen der Begin(FrameworkElement, Boolean)-Methode angegebene Objekt. Dieses Objekt enthält die Clock-Objekte, die für dieses Storyboard und seine untergeordneten Elemente erstellt wurden.
- offset
- TimeSpan
Ein positiver oder negativer Wert, der den Betrag angibt, um den die Zeitachse ab dem angegebenen origin
vorwärts oder rückwärts verschoben werden soll.
- origin
- TimeSeekOrigin
Die Position, ab der offset
angewendet wird.
Beispiele
Das folgende Beispiel zeigt, wie Sie eine Sekunde nach dem Start eines Storyboards suchen (überspringen).
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Shapes;
using System.Windows.Media.Animation;
namespace Microsoft.Samples.Animation.TimingBehaviors
{
public partial class SeekStoryboardExample : Page
{
private Storyboard myStoryboard;
public SeekStoryboardExample()
{
// Create a name scope for the page.
NameScope.SetNameScope(this, new NameScope());
StackPanel myStackPanel = new StackPanel();
// Create a rectangle.
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.
this.RegisterName("myRectangle", myRectangle);
//
// Create an animation and a storyboard to animate the
// rectangle.
//
DoubleAnimation myDoubleAnimation =
new DoubleAnimation(100, 500, new Duration(TimeSpan.FromSeconds(5)));
Storyboard.SetTargetName(myDoubleAnimation, "myRectangle");
Storyboard.SetTargetProperty(myDoubleAnimation, new PropertyPath(Rectangle.WidthProperty));
myStoryboard = new Storyboard();
myStoryboard.Children.Add(myDoubleAnimation);
// Create a buton to begin the Storyboard.
StackPanel buttonPanel = new StackPanel();
buttonPanel.Orientation = Orientation.Horizontal;
Button beginButton = new Button();
beginButton.Content = "Begin";
beginButton.Click += new RoutedEventHandler(beginButton_Clicked);
buttonPanel.Children.Add(beginButton);
// Create a button to seek to a specific time in the Storyboard.
Button seekStoryboardButton = new Button();
seekStoryboardButton.Content = "Seek to One Second After Begin Time";
seekStoryboardButton.Click += new RoutedEventHandler(seekStoryboardButton_Clicked);
buttonPanel.Children.Add(seekStoryboardButton);
myStackPanel.Children.Add(buttonPanel);
this.Content = myStackPanel;
}
// Begins the storyboard.
private void beginButton_Clicked(object sender, RoutedEventArgs args)
{
// Specifying "true" as the second Begin parameter
// makes this storyboard controllable.
myStoryboard.Begin(this, true);
}
// Seek (skip to) one second into the Storboard's active period (Duration).
private void seekStoryboardButton_Clicked(object sender, RoutedEventArgs args)
{
// Create time interval to seek to. This TimeSpan is set for one second.
TimeSpan myTimeSpan = new TimeSpan(0, 0, 1);
// Seek (skip to) to one second from the begin time of the Storyboard.
myStoryboard.Seek(this, myTimeSpan, TimeSeekOrigin.BeginTime);
}
}
}
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
Partial Public Class SeekStoryboardExample
Inherits Page
Private ReadOnly myStoryboard As Storyboard
Public Sub New()
' Create a name scope for the page.
NameScope.SetNameScope(Me, New NameScope())
Dim myStackPanel As New StackPanel()
' Create a rectangle.
Dim myRectangle As New Rectangle With {
.Width = 100,
.Height = 20,
.Margin = New Thickness(12, 0, 0, 5),
.Fill = New SolidColorBrush(Color.FromArgb(170, 51, 51, 255)),
.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.
RegisterName("myRectangle", myRectangle)
'
' Create an animation and a storyboard to animate the
' rectangle.
'
Dim myDoubleAnimation As New DoubleAnimation(100, 500, New Duration(TimeSpan.FromSeconds(5)))
Storyboard.SetTargetName(myDoubleAnimation, "myRectangle")
Storyboard.SetTargetProperty(myDoubleAnimation, New PropertyPath(Rectangle.WidthProperty))
myStoryboard = New Storyboard()
myStoryboard.Children.Add(myDoubleAnimation)
' Create a buton to begin the Storyboard.
Dim buttonPanel As New StackPanel With {
.Orientation = Orientation.Horizontal
}
Dim beginButton As New Button With {
.Content = "Begin"
}
AddHandler beginButton.Click, AddressOf beginButton_Clicked
buttonPanel.Children.Add(beginButton)
' Create a button to seek to a specific time in the Storyboard.
Dim seekStoryboardButton As New Button With {
.Content = "Seek to One Second After Begin Time"
}
AddHandler seekStoryboardButton.Click, AddressOf seekStoryboardButton_Clicked
buttonPanel.Children.Add(seekStoryboardButton)
myStackPanel.Children.Add(buttonPanel)
Content = myStackPanel
End Sub
' Begins the storyboard.
Private Sub beginButton_Clicked(sender As Object, args As RoutedEventArgs)
' Specifying "true" as the second Begin parameter
' makes this storyboard controllable.
myStoryboard.Begin(Me, True)
End Sub
' Seek (skip to) one second into the Storboard's active period (Duration).
Private Sub seekStoryboardButton_Clicked(sender As Object, args As RoutedEventArgs)
' Create time interval to seek to. This TimeSpan is set for one second.
Dim myTimeSpan As New TimeSpan(0, 0, 1)
' Seek (skip to) to one second from the begin time of the Storyboard.
myStoryboard.Seek(Me, myTimeSpan, TimeSeekOrigin.BeginTime)
End Sub
End Class
End Namespace
Das nächste Beispiel zeigt sowohl die Seek Methoden als SeekAlignedToLastTick auch.
/*
This example shows how to seek a storyboard.
*/
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Shapes;
using System.Windows.Media.Animation;
namespace Microsoft.Samples.Animation.AnimatingWithStoryboards
{
public partial class SeekExample : Page
{
private Storyboard myStoryboard;
private TextBlock currentTimeIndicator;
private TextBox seekDestination;
private TextBlock rectangleWidthIndicator;
private Rectangle myRectangle;
public SeekExample()
{
// Create a name scope for the page.
NameScope.SetNameScope(this, new NameScope());
this.WindowTitle = "Controlling a Storyboard";
this.Background = Brushes.White;
StackPanel myStackPanel = 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.
this.RegisterName("myRectangle", myRectangle);
//
// Create an animation and a storyboard to animate the
// rectangle.
//
DoubleAnimation myDoubleAnimation =
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.
//
StackPanel buttonPanel = new StackPanel();
buttonPanel.Orientation = Orientation.Horizontal;
Button beginButton = new Button();
beginButton.Content = "Begin";
beginButton.Click += new RoutedEventHandler(beginButton_Clicked);
buttonPanel.Children.Add(beginButton);
Button pauseButton = new Button();
pauseButton.Content = "Pause";
pauseButton.Click +=new RoutedEventHandler(pauseButton_Clicked);
buttonPanel.Children.Add(pauseButton);
Button resumeButton = new Button();
resumeButton.Content = "Resume";
resumeButton.Click +=new RoutedEventHandler(resumeButton_Clicked);
buttonPanel.Children.Add(resumeButton);
Button skipToFillButton = new Button();
skipToFillButton.Content = "Skip to Fill";
skipToFillButton.Click +=new RoutedEventHandler(skipToFillButton_Clicked);
buttonPanel.Children.Add(skipToFillButton);
Button setSpeedRatioButton = new Button();
setSpeedRatioButton.Content = "Triple Speed";
setSpeedRatioButton.Click +=new RoutedEventHandler(setSpeedRatioButton_Clicked);
buttonPanel.Children.Add(setSpeedRatioButton);
Button stopButton = new Button();
stopButton.Content = "Stop";
stopButton.Click +=new RoutedEventHandler(stopButton_Clicked);
buttonPanel.Children.Add(stopButton);
Button removeButton = new Button();
removeButton.Content = "Remove";
removeButton.Click +=new RoutedEventHandler(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.
StackPanel seekPanel = new StackPanel();
seekPanel.Margin = new Thickness(10);
StackPanel aPanel = new StackPanel();
Label aLabel = 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);
Button seekButton = new Button();
seekButton.Content = "Seek";
seekButton.Click += new RoutedEventHandler(seekButton_Clicked);
seekPanel.Children.Add(seekButton);
Button seekAlignedToLastTickButton = new Button();
seekAlignedToLastTickButton.Content = "Seek Aligned to Last Tick";
seekAlignedToLastTickButton.Click += new RoutedEventHandler(seekAlignedToLastTickButton_Clicked);
seekPanel.Children.Add(seekAlignedToLastTickButton);
myStackPanel.Children.Add(seekPanel);
this.Content = myStackPanel;
myStoryboard.CurrentTimeInvalidated += new EventHandler(myStoryboard_CurrentTimeInvalidated);
}
// Begins the storyboard.
private void beginButton_Clicked(object sender, RoutedEventArgs args)
{
// Specifying "true" as the second Begin parameter
// makes this storyboard controllable.
myStoryboard.Begin(this, true);
}
// Pauses the storyboard.
private void pauseButton_Clicked(object sender, RoutedEventArgs args)
{
myStoryboard.Pause(this);
}
// Resumes the storyboard.
private void resumeButton_Clicked(object sender, RoutedEventArgs args)
{
myStoryboard.Resume(this);
}
// Advances the storyboard to its fill period.
private void skipToFillButton_Clicked(object sender, RoutedEventArgs args)
{
myStoryboard.SkipToFill(this);
}
// Updates the storyboard's speed.
private void setSpeedRatioButton_Clicked(object sender, RoutedEventArgs args)
{
// Makes the storyboard progress three times as fast as normal.
myStoryboard.SetSpeedRatio(this, 3);
}
// Stops the storyboard.
private void stopButton_Clicked(object sender, RoutedEventArgs args)
{
myStoryboard.Stop(this);
}
// Removes the storyboard.
private void removeButton_Clicked(object sender, RoutedEventArgs args)
{
myStoryboard.Remove(this);
}
private void seekButton_Clicked(object sender, RoutedEventArgs args)
{
try {
// 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.
TimeSpan seekTime = TimeSpan.Parse(seekDestination.Text);
myStoryboard.Seek(this, seekTime, TimeSeekOrigin.BeginTime);
rectangleWidthIndicator.Text = myRectangle.Width.ToString();
}catch(FormatException ex)
{
MessageBox.Show("Invalid TimeSpan value.");
seekDestination.Focus();
}
}
private void seekAlignedToLastTickButton_Clicked(object sender, RoutedEventArgs args)
{
try {
// The rectangle width will be at its new
// value when this call is made, because SeekAlignedToLastTick
// operation immediately updates timeline and animation
// values.
TimeSpan seekTime = TimeSpan.Parse(seekDestination.Text);
myStoryboard.SeekAlignedToLastTick(this, seekTime, TimeSeekOrigin.BeginTime);
rectangleWidthIndicator.Text = myRectangle.Width.ToString();
}catch(FormatException ex)
{
MessageBox.Show("Invalid TimeSpan value.");
seekDestination.Focus();
}
}
private void myStoryboard_CurrentTimeInvalidated(object sender, EventArgs e)
{
currentTimeIndicator.Text = myStoryboard.GetCurrentTime(this).ToString();
}
}
}
'
' This example shows how to seek a storyboard.
'
'
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Media
Imports System.Windows.Shapes
Imports System.Windows.Media.Animation
Namespace Microsoft.Samples.Animation.AnimatingWithStoryboards
Partial Public Class SeekExample
Inherits Page
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.WindowTitle = "Controlling a Storyboard"
Me.Background = Brushes.White
Dim myStackPanel As New StackPanel()
myStackPanel.Margin = New Thickness(20)
' Create a rectangle.
myRectangle = New Rectangle()
With myRectangle
.Width = 100
.Height = 20
.Margin = New Thickness(12, 0, 0, 5)
.Fill = New SolidColorBrush(Color.FromArgb(170, 51, 51, 255))
.HorizontalAlignment = HorizontalAlignment.Left
End With
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()
buttonPanel.Orientation = Orientation.Horizontal
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)
Me.Content = myStackPanel
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
' 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.
Dim seekTime As TimeSpan = TimeSpan.Parse(seekDestination.Text)
myStoryboard.Seek(Me, seekTime, TimeSeekOrigin.BeginTime)
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
' The rectangle width will be at its new
' value when this call is made, because SeekAlignedToLastTick
' operation immediately updates timeline and animation
' values.
Dim seekTime As TimeSpan = TimeSpan.Parse(seekDestination.Text)
myStoryboard.SeekAlignedToLastTick(Me, seekTime, TimeSeekOrigin.BeginTime)
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
Hinweise
Beachten Sie, dass Suchvorgänge die Einstellungen oder SlipBehavior Einstellungen des Storyboards SpeedRatio nicht berücksichtigen. Das Storyboard wird so behandelt, als ob es eine SpeedRatio von 1 und keine SlipBehaviorhat.
Diese Methode ändert die Storyboarduhr CurrentState in Active. Diese Methode hat keine Auswirkungen auf die Zeitsteuerungsstruktur, bis das nächste Mal ein Häkchen verarbeitet wird. Als Nebeneffekt werden die entsprechenden Ereignisse auch erst dann ausgelöst.
Um dieses Storyboard interaktiv zu steuern, müssen Sie beim Aufrufen der interaktiven Methoden denselben containingObject
Parameter verwenden, den Sie zum Starten des Storyboards verwendet haben. Ein steuerbares Storyboard kann anhalten, fortsetzen, suchen, beenden und entfernt werden, wenn es kontrollierbar ist. Um ein Storyboard im Code steuerbar zu machen, müssen Sie die entsprechende Überladung der Methode des Storyboards Begin verwenden und angeben true
, um es steuerbar zu machen. Ein Beispiel finden Sie unter Vorgehensweise: Steuern eines Storyboards nach dem Start.
Die Suche nach einem Storyboard löst die CurrentGlobalSpeedInvalidated Ereignisse und CurrentStateInvalidated aus.