(0) exportieren Drucken
Alle erweitern
Erweitern Minimieren
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

Gewusst wie: Empfangen von Benachrichtigungen bei Statusänderungen der Uhr

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.


<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  xmlns:x="http://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>




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

Namespace Microsoft.Samples.Animation.TimingBehaviors

	Partial Public Class StateExample
		Inherits Page

		Private Sub parentTimelineStateInvalidated(ByVal sender As Object, ByVal args As EventArgs)
			Dim myClock As Clock = CType(sender, Clock)
			ParentTimelineStateTextBlock.Text += myClock.CurrentTime.ToString() & ":" & myClock.CurrentState.ToString() & " "
		End Sub

		Private Sub animation1StateInvalidated(ByVal sender As Object, ByVal args As EventArgs)

			Dim myClock As Clock = CType(sender, Clock)

			Animation1StateTextBlock.Text += myClock.Parent.CurrentTime.ToString() & ":" & myClock.CurrentState.ToString() & " "
		End Sub

		Private Sub animation2StateInvalidated(ByVal sender As Object, ByVal args As EventArgs)

			Dim myClock As Clock = CType(sender, Clock)
			Animation2StateTextBlock.Text += myClock.Parent.CurrentTime.ToString() & ":" & myClock.CurrentState.ToString() & " "
		End Sub
	End Class
End Namespace



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.

Uhr-Zustände für ein Drehbuch mit zwei Animationen

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

Zustand

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

Zustand

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.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft