Storyboard.Seek メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
この Storyboard は、クロックが次の目盛りを刻んだときに、新しい位置までシークします。
オーバーロード
Seek(TimeSpan) |
この Storyboard を指定した位置までシークします。 Storyboard は、クロックが次の目盛りを刻んだときに、要求されたシークを実行します。 |
Seek(TimeSpan, TimeSeekOrigin) |
この Storyboard を指定した位置までシークします。 Storyboard は、クロックが次の目盛りを刻んだときに、要求されたシークを実行します。 |
Seek(FrameworkContentElement, TimeSpan, TimeSeekOrigin) |
この Storyboard を指定した位置までシークします。 Storyboard は、クロックが次の目盛りを刻んだときに、要求されたシークを実行します。 |
Seek(FrameworkElement, TimeSpan, TimeSeekOrigin) |
この Storyboard を指定した位置までシークします。 Storyboard は、クロックが次の目盛りを刻んだときに、要求されたシークを実行します。 |
Seek(TimeSpan)
この Storyboard を指定した位置までシークします。 Storyboard は、クロックが次の目盛りを刻んだときに、要求されたシークを実行します。
public:
void Seek(TimeSpan offset);
public void Seek (TimeSpan offset);
member this.Seek : TimeSpan -> unit
Public Sub Seek (offset As TimeSpan)
パラメーター
- offset
- TimeSpan
タイムラインが前方または後方にどれだけ移動するかを示す正の値または負の値。
注釈
シーク操作では、ストーリーボードまたはSlipBehavior設定はSpeedRatio考慮されないことに注意してください。 ストーリーボードは、 が 1 で SpeedRatio 、 がない SlipBehaviorかのように扱われます。
このストーリーボードを対話的に制御するには、ストーリーボードの開始に使用した対話型メソッドを呼び出すときに同じ containingObject
パラメーターを使用する必要があります。 制御可能なストーリーボードは、一時停止、再開、シーク、停止、および削除できます。 コードでストーリーボードを制御できるようにするには、ストーリーボード Begin の メソッドの適切なオーバーロードを使用し、 を指定 true
して制御できるようにする必要があります。 例については、「 方法: 開始後にストーリーボードを制御する」を参照してください。
適用対象
Seek(TimeSpan, TimeSeekOrigin)
この Storyboard を指定した位置までシークします。 Storyboard は、クロックが次の目盛りを刻んだときに、要求されたシークを実行します。
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)
パラメーター
- offset
- TimeSpan
タイムラインが、指定した origin
から前方または後方にどれだけ移動するかを示す正の値または負の値。
- origin
- TimeSeekOrigin
offset
の適用元の位置。
注釈
シーク操作では、ストーリーボードまたはSlipBehavior設定はSpeedRatio考慮されないことに注意してください。 ストーリーボードは、 が 1 で SpeedRatio 、 がない SlipBehaviorかのように扱われます。
このストーリーボードを対話的に制御するには、ストーリーボードの開始に使用した対話型メソッドを呼び出すときに同じ containingObject
パラメーターを使用する必要があります。 制御可能なストーリーボードは、一時停止、再開、シーク、停止、および削除できます。 コードでストーリーボードを制御できるようにするには、ストーリーボード Begin の メソッドの適切なオーバーロードを使用し、 を指定 true
して制御できるようにする必要があります。 例については、「 方法: 開始後にストーリーボードを制御する」を参照してください。
適用対象
Seek(FrameworkContentElement, TimeSpan, TimeSeekOrigin)
この Storyboard を指定した位置までシークします。 Storyboard は、クロックが次の目盛りを刻んだときに、要求されたシークを実行します。
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)
パラメーター
- containingObject
- FrameworkContentElement
Begin(FrameworkContentElement, Boolean) メソッドの呼び出し時に指定されたオブジェクト。 このオブジェクトには、このストーリーボードとその子に対して作成された Clock オブジェクトが格納されます。
- offset
- TimeSpan
タイムラインが、指定した origin
から前方または後方にどれだけ移動するかを示す正の値または負の値。
- origin
- TimeSeekOrigin
offset
の適用元の位置。
例
次の例では、 メソッドと SeekAlignedToLastTick メソッドのSeek両方を示します。
/*
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
注釈
シーク操作では、ストーリーボードまたはSlipBehavior設定はSpeedRatio考慮されないことに注意してください。 ストーリーボードは、 が 1 で SpeedRatio 、 がない SlipBehaviorかのように扱われます。
このメソッドは、ストーリーボード クロックの CurrentState を に Active変更します。 このメソッドは、次回ティックが処理されるまで、タイミング ツリーには影響しません。 副作用として、それまで適切なイベントも発生しません。
このストーリーボードを対話的に制御するには、ストーリーボードの開始に使用した対話型メソッドを呼び出すときに同じ containingObject
パラメーターを使用する必要があります。 制御可能なストーリーボードは、一時停止、再開、シーク、停止、および削除できます。 コードでストーリーボードを制御できるようにするには、ストーリーボード Begin の メソッドの適切なオーバーロードを使用し、 を指定 true
して制御できるようにする必要があります。 例については、「 方法: 開始後にストーリーボードを制御する」を参照してください。
ストーリーボードをシークすると、 イベントと CurrentStateInvalidated イベントがCurrentGlobalSpeedInvalidatedトリガーされます。
適用対象
Seek(FrameworkElement, TimeSpan, TimeSeekOrigin)
この Storyboard を指定した位置までシークします。 Storyboard は、クロックが次の目盛りを刻んだときに、要求されたシークを実行します。
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)
パラメーター
- containingObject
- FrameworkElement
Begin(FrameworkElement, Boolean) メソッドの呼び出し時に指定されたオブジェクト。 このオブジェクトには、このストーリーボードとその子に対して作成された Clock オブジェクトが格納されます。
- offset
- TimeSpan
タイムラインが、指定した origin
から前方または後方にどれだけ移動するかを示す正の値または負の値。
- origin
- TimeSeekOrigin
offset
の適用元の位置。
例
次の例は、ストーリーボードの開始後に 1 秒にシーク (スキップ) する方法を示しています。
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
次の例では、 メソッドと SeekAlignedToLastTick メソッドのSeek両方を示します。
/*
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
注釈
シーク操作では、ストーリーボードまたはSlipBehavior設定はSpeedRatio考慮されないことに注意してください。 ストーリーボードは、 が 1 で SpeedRatio 、 がない SlipBehaviorかのように扱われます。
このメソッドは、ストーリーボード クロックの CurrentState を に Active変更します。 このメソッドは、次回ティックが処理されるまで、タイミング ツリーには影響しません。 副作用として、それまで適切なイベントも発生しません。
このストーリーボードを対話的に制御するには、ストーリーボードの開始に使用した対話型メソッドを呼び出すときに同じ containingObject
パラメーターを使用する必要があります。 制御可能なストーリーボードは、一時停止、再開、シーク、停止、および制御可能にされた場合に削除できます。 コードでストーリーボードを制御できるようにするには、ストーリーボード Begin の メソッドの適切なオーバーロードを使用し、 を指定 true
して制御できるようにする必要があります。 例については、「 方法: 開始後にストーリーボードを制御する」を参照してください。
ストーリーボードをシークすると、 イベントと CurrentStateInvalidated イベントがCurrentGlobalSpeedInvalidatedトリガーされます。
こちらもご覧ください
適用対象
.NET