Zamanlama Olaylarına Genel Bakış

Bu konuda, ve nesnelerinde kullanılabilir olan beş zamanlama olayının nasıl kullanılacağı Timeline açıklanmaktadır Clock .

Önkoşullar

Bu konuyu anlamak için animasyonların nasıl oluşturulduğunu ve kullanıldığını anlamanız gerekir. Animasyonu kullanmaya başlamak için animasyon genel bakış ' abakın.

WPF özelliklerine animasyon uygulamak için birden çok yol vardır:

Bunları biçimlendirme ve kod içinde kullanabilmeniz için bu genel bakışdaki örneklerde Storyboard nesneleri kullanın. Ancak, açıklanan kavramlar, hareketlendirilen özelliklerin diğer yöntemlerine uygulanabilir.

Saat nedir?

Tek bir zaman çizelgesi, bir zaman kesimini betimleyen, aslında hiçbir şey yapmaz. Bu, gerçek işi yapan zaman çizelgesinin Clock nesnesidir: zaman çizelgesi için zamanlamasıyla ilgili çalışma zamanı durumunu saklar. Film şeritleri kullanılırken olduğu gibi çoğu durumda, zaman çizelgeniz için bir saat otomatik olarak oluşturulur. ClockYöntemini kullanarak açıkça de oluşturabilirsiniz CreateClock . Nesneler hakkında daha fazla bilgi için Clock bkz. Clock.

Neden olay kullanmalıyım?

Tek istisna (son Tick 'e hizalı arama) ile tüm etkileşimli zamanlama işlemleri zaman uyumsuzdur. Ne zaman yürütülecektir tam olarak bilmeniz mümkün değildir. Bu, zamanlama işlemine bağlı başka bir kodunuz olduğunda sorun olabilir. Bir dikdörtgenin animasyonunu yapan bir zaman çizelgesini durdurmak istediğinizi varsayalım. Zaman çizelgesi durdurulduğunda, dikdörtgenin rengini değiştirirsiniz.

myStoryboard.Stop(myRectangle);

// This statement might execute
// before the storyboard has stopped.
myRectangle.Fill = Brushes.Blue;
myStoryboard.Stop(myRectangle)

' This statement might execute
' before the storyboard has stopped.
myRectangle.Fill = Brushes.Blue

Önceki örnekte, ikinci kod satırı film şeridi durdurulmadan önce yürütülemeyebilir. Bunun nedeni, durdurma zaman uyumsuz bir işlemdir. Bir zaman çizelgesine veya durdurulacak saatin durdurulmasına, zamanlama altyapısının bir sonraki Tick 'e kadar işlenmediği sıralamalar "durdurma isteği" oluşturulur.

Bir zaman çizelgesi tamamlandıktan sonra komutları yürütmek için zamanlama olaylarını kullanın. Aşağıdaki örnekte, film şeridi yürütmeyi başlattıktan sonra dikdörtgenin rengini değiştirmek için bir olay işleyicisi kullanılır.

// Register for the CurrentStateInvalidated timing event.
myStoryboard.CurrentStateInvalidated += new EventHandler(myStoryboard_CurrentStateInvalidated);
' Register for the CurrentStateInvalidated timing event.
AddHandler myStoryboard.CurrentStateInvalidated, AddressOf myStoryboard_CurrentStateInvalidated
// Change the rectangle's color after the storyboard stops.
void myStoryboard_CurrentStateInvalidated(object sender, EventArgs e)
{
    Clock myStoryboardClock = (Clock)sender;
    if (myStoryboardClock.CurrentState == ClockState.Stopped)
    {
        myRectangle.Fill = Brushes.Blue;
    }
}
' Change the rectangle's color after the storyboard stops. 
Private Sub myStoryboard_CurrentStateInvalidated(ByVal sender As Object, ByVal e As EventArgs)
    Dim myStoryboardClock As Clock = CType(sender, Clock)
    If myStoryboardClock.CurrentState = ClockState.Stopped Then
        myRectangle.Fill = Brushes.Blue
    End If
End Sub

Daha kapsamlı bir örnek için bkz. saatin durumu değiştiğinde bildirim alma.

Ortak Olaylar

TimelineVe Clock sınıflarının her ikisi de beş zamanlama olayı sağlar. Aşağıdaki tabloda bu olaylar ve bunları tetikleyen koşullar listelenmektedir.

Olay Etkileşimli işlem tetikleniyor Diğer Tetikleyiciler
Tamamlandı Doldurmaya Atla Saat tamamlanır.
CurrentGlobalSpeedInvalidated Duraklatma, devam etmeyi, arama, hız oranını ayarlama, dolguyu atla, durdur Saat tersine çevirir, hızlandırır, başlar veya sonlandırır.
Currentstategeçersiz kılındı Başlayın, dolguyu atla, durdur Saat başlar, duraklar veya dolguları.
Currenttimegeçersiz kılındı Başlat, ara, dolguyu atla, durdur Saat ilerler.
Removerequin Kaldır

Görü ve olay birleştirme

WPF 'deki nesnelere animasyon uyguladığınızda, animasyonlarınızı yöneten zamanlama motoru vardır. Zamanlama altyapısı zaman ilerlemesini izler ve her animasyonun durumunu hesaplar. Bir saniyede birçok değerlendirme geçişi yapar. Bu değerlendirme geçişleri "ticks" olarak bilinir.

Tick 'ler sık gerçekleşirken, Tick 'ler arasında çok sayıda şeyin gerçekleşmesi mümkündür. Örneğin, bir zaman çizelgesi durdurulmuş, başlatılmış ve yeniden durdurulmuş olabilir, bu durumda geçerli durumu üç kez değişir. Teorik olarak, olay tek bir tick içinde birden çok kez yükseltilebilir; Ancak zamanlama altyapısı olayları birleştirir, böylece her bir olay her dönem için en fazla bir kez oluşturulabilir.

Olaylara kaydolma

Zamanlama olaylarına kaydolmak için iki yol vardır: zaman çizelgesine veya zaman çizelgesinden oluşturulan saatle kayıt yapabilirsiniz. Bir olayı doğrudan bir saatle kaydetmek oldukça basittir, ancak yalnızca koddan yapılabilir. Biçimlendirme veya koddan bir zaman çizelgesine sahip olaylara kaydolabilirsiniz. Sonraki bölümde, saat olaylarının zaman çizelgesi ile nasıl kaydedileceği açıklanmaktadır.

Zaman çizelgesi ile saat olaylarını kaydetme

Zaman çizelgesinin,, Completed , CurrentGlobalSpeedInvalidatedCurrentStateInvalidatedCurrentTimeInvalidated ve RemoveRequested olaylarının zaman çizelgesi ile ilişkilendirilmesi gibi görünmesine karşın, bu olaylara kaydolmak gerçekten Clock zaman çizelgesi için oluşturulan bir olay işleyicisini ilişkilendirir.

CompletedOlay için bir zaman çizelgesinde kayıt yaptığınızda, aslında sisteme, Completed zaman çizelgesi için oluşturulan her bir saatin olayına kaydolmasını söylemiş olursunuz. Kod içinde bu zaman çizelgesi için oluşturulmadan önce bu olaya kaydolmanız gerekir Clock ; Aksi takdirde, bildirim almazsınız. Bu, XAML 'de otomatik olarak gerçekleşir; Ayrıştırıcı, olay oluşturulmadan önce otomatik olarak kaydeder Clock .

Ayrıca bkz.