2009-08-05 15 views
7

Mam kilka kontroli użytkownika WPF, które wewnętrznie wyzwalają niektóre animacje podczas interakcji użytkownika. Wszystkie animacje mają parametr repeatbehavior = "true", a wszystkie animacje mają taki sam czas trwania. Teraz chciałbym zsynchronizować wszystkie animacje na jednej osi czasu, aby były zsynchronizowane. Bez względu na to, kiedy użytkownik uruchomi animacje. Na przykład, jeśli animacje przez ostatnie 3 sekundy i użytkownik uruchamia drugą animację 1,5 sekundy po pierwszej, nadal chcę, aby animacje osiągnęły maksimum w tym samym czasie. Może mogę zdefiniować globalną linię czasu w globalnym słowniku zasobów, z której mogą korzystać wszystkie animacje zdefiniowane gdzieś w UserControls? Korzystnie tylko XAML.Wiele scen lub animacji z tą samą osią czasu?

Odpowiedz

0

Po prostu dodaj wszystkie swoje animacje do pojedynczego TimelineCollection. Następnie dodaj tę TimelineCollection do swojej Storyboard.Children. Wtedy wszyscy wystrzelą jednocześnie.

+0

jak ja powiedział animacje są zdefiniowane przez moje kontrole użytkownika. Nie sądzę, że istnieje sposób na dodanie animacji, które są zdefiniowane w różnych kontrolach użytkownika na tej samej osi czasu. A może jest? – bitbonk

0

XAML: niemożliwe (o ile wiem)

Kod: CompositionTarget.Rendering

+1

Czy możesz rozwinąć sposób, w jaki będę używać zdarzenia CompositionTarget.Rendering z moimi definicjami animacji? – bitbonk

+0

Musisz przenieść animację do kodu. W zdarzeniu Rendering sprawdź, które animacje powinny być uruchomione i ręcznie aktualizuj odpowiednie właściwości na podstawie pojedynczej zmiennej timera. To nie jest dużo pracy, tylko kilka linii SomeElement.SomeProperty = baseValue + rate * timePassed; – ima

Powiązane problemy