Gewusst wie: Empfangen von Benachrichtigungen bei Statusänderungen der Uhr
Aktualisiert: November 2007
Das CurrentStateInvalidated-Ereignis einer Uhr tritt auf, wenn ihr CurrentState ungültig wird, beispielsweise, wenn die Uhr angehalten oder gestartet wird. Sie können dieses Ereignis registrieren, indem Sie entweder direkt eine Clock verwenden, oder indem Sie die Registrierung mit einer Timeline vornehmen.
Im folgenden Beispiel werden ein Storyboard-Objekt und zwei DoubleAnimation-Objekte verwendet, um die Breite von zwei Rechtecken zu animieren. Das CurrentStateInvalidated-Ereignis wird verwendet, um Statusänderungen der Uhr zu überwachen.
Beispiel
<Page xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
x:Class="Microsoft.Samples.Animation.TimingBehaviors.StateExample"
Background="LightGray">
<StackPanel Margin="20">
<TextBlock
Name="ParentTimelineStateTextBlock"></TextBlock>
<TextBlock
Name="Animation1StateTextBlock"></TextBlock>
<Rectangle
Name="Rectangle01"
Width="100" Height="50" Fill="Orange" />
<TextBlock Name="Animation2StateTextBlock"></TextBlock>
<Rectangle
Name="Rectangle02"
Width="100" Height="50" Fill="Gray" />
<Button Content="Start Animations" Margin="20">
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<BeginStoryboard>
<Storyboard RepeatBehavior="2x" AutoReverse="True"
CurrentStateInvalidated="parentTimelineStateInvalidated" >
<DoubleAnimation
Storyboard.TargetName="Rectangle01"
Storyboard.TargetProperty="Width"
From="10" To="200" Duration="0:0:9"
BeginTime="0:0:1"
CurrentStateInvalidated="animation1StateInvalidated"/>
<DoubleAnimation
Storyboard.TargetName="Rectangle02"
Storyboard.TargetProperty="Width"
From="10" To="200" Duration="0:0:8"
BeginTime="0:0:1"
CurrentStateInvalidated="animation2StateInvalidated" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
</StackPanel>
</Page>
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Animation;
namespace Microsoft.Samples.Animation.TimingBehaviors
{
public partial class StateExample : Page
{
private void parentTimelineStateInvalidated(object sender, EventArgs args)
{
Clock myClock = (Clock)sender;
ParentTimelineStateTextBlock.Text +=
myClock.CurrentTime.ToString() + ":"
+ myClock.CurrentState.ToString() + " ";
}
private void animation1StateInvalidated(object sender, EventArgs args)
{
Clock myClock = (Clock)sender;
Animation1StateTextBlock.Text +=
myClock.Parent.CurrentTime.ToString() + ":"
+ myClock.CurrentState.ToString() + " ";
}
private void animation2StateInvalidated(object sender, EventArgs args)
{
Clock myClock = (Clock)sender;
Animation2StateTextBlock.Text +=
myClock.Parent.CurrentTime.ToString() + ":"
+ myClock.CurrentState.ToString() + " ";
}
}
}
Die folgende Abbildung zeigt die unterschiedlichen Zustände an, in die die Animationen übergehen, während die übergeordnete Zeitachse (Storyboard) fortschreitet.
In der folgenden Tabelle sind die Zeiten aufgeführt, zu denen das CurrentStateInvalidated-Ereignis von Animation1 ausgelöst wird:
Zeit (Sekunden) |
1 |
10 |
19 |
21 |
30 |
39 |
Status |
Aktiv |
Aktiv |
Beendet |
Aktiv |
Aktiv |
Beendet |
In der folgenden Tabelle sind die Zeiten aufgeführt, zu denen das CurrentStateInvalidated-Ereignis von Animation2 ausgelöst wird:
Zeit (Sekunden) |
1 |
9 |
11 |
19 |
21 |
29 |
31 |
39 |
Status |
Aktiv |
Füllung |
Aktiv |
Beendet |
Aktiv |
Füllung |
Aktiv |
Beendet |
Beachten Sie, dass das CurrentStateInvalidated-Ereignis von Animation1 bei 10 Sekunden ausgelöst wird, obwohl der Status weiterhin Active ist. Dies kommt daher, dass sich der Status bei 10 Sekunden geändert hat, wobei er sich jedoch von Active in Filling und am selben Teilstrich wieder in Active geändert hat.