Zamanlama Olaylarına Genel Bakış

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

Ön koşullar

Bu konuyu anlamak için animasyon oluşturmayı ve kullanmayı anlamanız gerekir. Animasyonu kullanmaya başlamak için bkz. Animasyona Genel Bakış.

WPF'de özelliklere animasyon eklemenin birden çok yolu vardır:

  • Görsel taslak nesnelerini (işaretleme ve kod) kullanma: Animasyonları düzenlemek ve bir veya daha fazla nesneye dağıtmak için nesneleri kullanabilirsiniz Storyboard . Örnek için bkz . Görsel Taslak Kullanarak Özelliğe Animasyon Ekleme.

  • Yerel animasyonları kullanma (yalnızca kod): Nesneleri animasyonlu oldukları özelliklere doğrudan uygulayabilirsiniz AnimationTimeline . Örnek için bkz . Görsel Taslak Kullanmadan Özelliğe Animasyon Ekleme.

  • Saatleri kullanma (yalnızca kod): Saat oluşturmayı açıkça yönetebilir ve animasyon saatlerini kendiniz dağıtabilirsiniz. Örnek için bkz . AnimationClock Kullanarak Özelliğe Animasyon Ekleme.

Bunları işaretleme ve kodda kullanabileceğiniz için, bu genel bakıştaki örnekler nesneleri kullanır Storyboard . Ancak, açıklanan kavramlar diğer özellikler animasyonu yöntemlerine uygulanabilir.

Saat nedir?

Zaman çizelgesi tek başına bir zaman dilimini tanımlamaktan başka bir şey yapmaz. Gerçek işi zaman çizelgesinin Clock nesnesidir: zaman çizelgesi için zamanlamayla ilgili çalışma zamanı durumunu korur. Görsel taslakları kullanırken olduğu gibi çoğu durumda zaman çizelgeniz için otomatik olarak bir saat oluşturulur. Yöntemini kullanarak CreateClock açıkça da oluşturabilirsinizClock. Nesneler hakkında Clock daha fazla bilgi için bkz . Animasyon ve Zamanlama Sistemine Genel Bakış.

Neden Olaylar Kullanılır?

Bir (arama son değere hizalanmış arama) dışında, tüm etkileşimli zamanlama işlemleri zaman uyumsuzdur. Tam olarak ne zaman yürütüleceklerini bilmenin hiçbir yolu yok. Zamanlama işleminize bağımlı olan başka bir kodunuz olduğunda bu sorun olabilir. Dikdörtgen animasyonu oluşturan bir zaman çizelgesini durdurmak istediğinizi varsayalım. Zaman çizelgesi durduktan sonra 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ı görsel taslak durdurulmadan önce yürütülebilir. Bunun nedeni durdurma işleminin zaman uyumsuz bir işlem olmasıdır. Zaman çizelgesinin veya saatin durdurulmasını söylemek, zamanlama altyapısı bir sonraki onay işaretine kadar işlenmemiş bir "durdurma isteği" oluşturur.

Zaman çizelgesi tamamlandıktan sonra komutları yürütmek için zamanlama olaylarını kullanın. Aşağıdaki örnekte, görsel taslak oynatıldı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 eksiksiz bir örnek için bkz . Saatin Durumu Değiştiğinde Bildirim Alma.

Ortak Olaylar

Timeline ve Clock sınıfları beş zamanlama olayı sağlar. Aşağıdaki tabloda bu olaylar ve bunları tetikleyen koşullar listelemektedir.

Olay Etkileşimli işlemi tetikleme Diğer tetikleyiciler
Tamamlandı Doldurmaya atla Saat tamam.
Currentglobalspeedınvalidated Duraklatma, sürdürme, arama, hız oranını ayarlama, doldurmaya atlama, durdurma Saat tersine döner, hızlandırır, başlatılır veya durur.
Currentstateınvalidated Başlayın, doldurmaya atlayın, durdurun Saat başlar, durur veya dolar.
CurrentTimeInvalidated Başlangıç, arama, doldurmaya atlama, durdurma Saat ilerler.
RemoveRequested Kaldır

İzleme ve Olay Birleştirme

WPF'de nesnelere animasyon eklediğinizde, animasyonlarınızı yöneten zamanlama altyapısıdır. Zamanlama altyapısı zamanın ilerlemesini izler ve her animasyonun durumunu hesaplar. Bu tür birçok değerlendirmeyi saniye içinde geçirir. Bu değerlendirme geçişleri "onay işareti" olarak bilinir.

Keneler sık sık gerçekleşirken, keneler arasında birçok şeyin gerçekleşmesi mümkündür. Örneğin, bir zaman çizelgesi durdurulabilir, başlatılabilir ve yeniden durdurulabilir ve bu durumda geçerli durumu üç kez değişmiş olur. Teoride, olay tek bir kene içinde birden çok kez tetiklenebilir; ancak zamanlama altyapısı olayları birleştirir, böylece her olay her bir kene başına en fazla bir kez tetiklenebilir.

Olaylara Kaydolma

Zamanlama olaylarına kaydolmanın iki yolu vardır: zaman çizelgesine veya zaman çizelgesinden oluşturulan saate kaydolabilirsiniz. Bir olaya doğrudan saatle kaydolmak oldukça basittir, ancak yalnızca koddan yapılabilir. İşaretlemeyi veya kodu kullanarak zaman çizelgesiyle olaylara kaydolabilirsiniz. Sonraki bölümde zaman çizelgesiyle saat olaylarına nasıl kaydedildiği açıklanmaktadır.

Zaman Çizelgesi ile Saat Olaylarına Kaydolma

Zaman çizelgesinin Completed, CurrentGlobalSpeedInvalidated, CurrentStateInvalidated, , CurrentTimeInvalidatedve RemoveRequested olayları zaman çizelgesiyle ilişkilendirildi gibi görünse de, bu olaylara kaydolmak aslında bir olay işleyicisini Clock zaman çizelgesi için oluşturulan ile ilişkilendirir.

Örneğin, bir zaman çizelgesinde Completed olaya kaydolduğunuz zaman, sisteme aslında zaman çizelgesi için Completed oluşturulan her saatin olayına kaydolmasını söylemiş olursunuz. Kodda, bu zaman çizelgesi için oluşturmadan önce Clock bu olaya kaydolmanız gerekir; aksi takdirde bildirim almazsınız. Bu, XAML'de otomatik olarak gerçekleşir; ayrıştırıcı, oluşturulmadan önce Clock olayı otomatik olarak kaydeder.

Ayrıca bkz.