ClockController.Seek(TimeSpan, TimeSeekOrigin) 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
다음 틱이 발생할 때 대상 Clock 을 지정된 크기만큼 검색합니다. 대상 클록이 중지된 경우 검색하면 다시 활성화됩니다.
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
의 값에 따라 클록의 BeginTime 또는 Duration을 기준으로 합니다.
- origin
- TimeSeekOrigin
지정된 오프셋이 대상 클록의 BeginTime 또는 Duration을 기준으로 하는지 여부를 나타내는 값입니다.
예제
다음 예제를 사용 하 여 검색 하는 방법을 보여 줍니다는 ClockController합니다.
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Data;
using System.Xml;
using System.Configuration;
namespace SDKSample
{
/// <summary>
/// Shows how to interactively control a clock.
/// </summary>
public class SeekAlignedToLastTickExample : Page
{
private AnimationClock myClock;
private TextBlock currentTimeIndicator;
private TextBox seekDestination;
private TextBlock rectangleWidthIndicator;
private Rectangle myRectangle;
public SeekAlignedToLastTickExample()
{
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);
//
// Create an animation and a storyboard to animate the
// rectangle.
//
DoubleAnimation myDoubleAnimation =
new DoubleAnimation(100, 500, new Duration(TimeSpan.FromSeconds(60)));
myClock = myDoubleAnimation.CreateClock();
myRectangle.ApplyAnimationClock(Rectangle.WidthProperty, myClock);
myClock.Controller.Stop();
//
// 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;
myClock.CurrentTimeInvalidated += new EventHandler(myClock_CurrentTimeInvalidated);
}
// Begins the clock.
private void beginButton_Clicked(object sender, RoutedEventArgs args)
{
myClock.Controller.Begin();
}
// Pauses the clock.
private void pauseButton_Clicked(object sender, RoutedEventArgs args)
{
myClock.Controller.Pause();
}
// Resumes the clock.
private void resumeButton_Clicked(object sender, RoutedEventArgs args)
{
myClock.Controller.Resume();
}
// Advances the clock to its fill period.
private void skipToFillButton_Clicked(object sender, RoutedEventArgs args)
{
myClock.Controller.SkipToFill();
}
// Updates the clock's speed.
private void setSpeedRatioButton_Clicked(object sender, RoutedEventArgs args)
{
// Makes the clock progress three times as fast as normal.
myClock.Controller.SpeedRatio = 3;
}
// Stops the clock.
private void stopButton_Clicked(object sender, RoutedEventArgs args)
{
myClock.Controller.Stop();
}
// Removes the clock.
private void removeButton_Clicked(object sender, RoutedEventArgs args)
{
myClock.Controller.Remove();
}
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
// clock probably hasn't ticked yet.
TimeSpan seekTime = TimeSpan.Parse(seekDestination.Text);
myClock.Controller.Seek(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);
myClock.Controller.SeekAlignedToLastTick(seekTime, TimeSeekOrigin.BeginTime);
rectangleWidthIndicator.Text = myRectangle.Width.ToString();
}catch(FormatException ex)
{
MessageBox.Show("Invalid TimeSpan value.");
seekDestination.Focus();
}
}
private void myClock_CurrentTimeInvalidated(object sender, EventArgs e)
{
currentTimeIndicator.Text = myClock.CurrentTime.ToString();
}
}
}
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Media
Imports System.Windows.Media.Animation
Imports System.Windows.Navigation
Imports System.Windows.Shapes
Imports System.Data
Imports System.Xml
Imports System.Configuration
Namespace SDKSample
''' <summary>
''' Shows how to interactively control a clock.
''' </summary>
Public Class SeekAlignedToLastTickExample
Inherits Page
Private myClock As AnimationClock
Private currentTimeIndicator As TextBlock
Private seekDestination As TextBox
Private rectangleWidthIndicator As TextBlock
Private myRectangle As Rectangle
Public Sub New()
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)
'
' Create an animation and a storyboard to animate the
' rectangle.
'
Dim myDoubleAnimation As New DoubleAnimation(100, 500, New Duration(TimeSpan.FromSeconds(60)))
myClock = myDoubleAnimation.CreateClock()
myRectangle.ApplyAnimationClock(Rectangle.WidthProperty, myClock)
myClock.Controller.Stop()
'
' 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 myClock.CurrentTimeInvalidated, AddressOf myClock_CurrentTimeInvalidated
End Sub
' Begins the clock.
Private Sub beginButton_Clicked(ByVal sender As Object, ByVal args As RoutedEventArgs)
myClock.Controller.Begin()
End Sub
' Pauses the clock.
Private Sub pauseButton_Clicked(ByVal sender As Object, ByVal args As RoutedEventArgs)
myClock.Controller.Pause()
End Sub
' Resumes the clock.
Private Sub resumeButton_Clicked(ByVal sender As Object, ByVal args As RoutedEventArgs)
myClock.Controller.Resume()
End Sub
' Advances the clock to its fill period.
Private Sub skipToFillButton_Clicked(ByVal sender As Object, ByVal args As RoutedEventArgs)
myClock.Controller.SkipToFill()
End Sub
' Updates the clock's speed.
Private Sub setSpeedRatioButton_Clicked(ByVal sender As Object, ByVal args As RoutedEventArgs)
' Makes the clock progress three times as fast as normal.
myClock.Controller.SpeedRatio = 3
End Sub
' Stops the clock.
Private Sub stopButton_Clicked(ByVal sender As Object, ByVal args As RoutedEventArgs)
myClock.Controller.Stop()
End Sub
' Removes the clock.
Private Sub removeButton_Clicked(ByVal sender As Object, ByVal args As RoutedEventArgs)
myClock.Controller.Remove()
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
' clock probably hasn't ticked yet.
Dim seekTime As TimeSpan = TimeSpan.Parse(seekDestination.Text)
myClock.Controller.Seek(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)
myClock.Controller.SeekAlignedToLastTick(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 myClock_CurrentTimeInvalidated(ByVal sender As Object, ByVal e As EventArgs)
currentTimeIndicator.Text = myClock.CurrentTime.ToString()
End Sub
End Class
End Namespace
설명
Seek 작업 적용 되지 않습니다는 SpeedRatio 또는 SlipBehavior 계정에이 clock의 타임이 라인의 설정을: 시계는 해당 타임 라인에 처럼 처리 됩니다는 SpeedRatio 1 및 no SlipBehavior합니다.
이 메서드가 변경 시계의 CurrentState 에 Active입니다. 이 메서드는 틱을 처리할 때까지 타이밍 트리에 영향을 주지는. 파생 작업으로 적절 한 이벤트를도 발생 하지 않습니다 그때까지 합니다.
스토리 보드 트리거를 검색 합니다 CurrentGlobalSpeedInvalidated 및 CurrentStateInvalidated 이벤트입니다.
대상 클록에 자식이 해당 현재 그에 따라 업데이트 됩니다.
적용 대상
추가 정보
.NET