Gambaran Umum Waktu Peristiwa
Topik ini menjelaskan cara menggunakan lima peristiwa waktu yang tersedia di Timeline objek dan Clock .
Prasyarat
Untuk memahami topik ini, Anda harus memahami cara membuat dan menggunakan animasi. Untuk mulai menggunakan animasi, lihat Gambaran Umum Animasi.
Ada beberapa cara untuk menganimasikan properti di WPF:
Menggunakan objek papan cerita (markup dan kode): Anda dapat menggunakan Storyboard objek untuk menyusun dan mendistribusikan animasi ke satu atau beberapa objek. Misalnya, lihat Menganimasikan Properti dengan Menggunakan Storyboard.
Menggunakan animasi lokal (hanya kode): Anda dapat menerapkan AnimationTimeline objek langsung ke properti yang dianimasikan. Misalnya, lihat Menganimasikan Properti Tanpa Menggunakan Papan Cerita.
Menggunakan jam (hanya kode): Anda dapat secara eksplisit mengelola pembuatan jam dan mendistribusikan jam animasi sendiri. Misalnya, lihat Menganimasikan Properti dengan Menggunakan AnimationClock.
Karena Anda dapat menggunakannya dalam markup dan kode, contoh dalam gambaran umum ini menggunakan Storyboard objek. Namun, konsep yang dijelaskan dapat diterapkan ke metode lain dari properti animasi.
Apa itu jam?
Garis waktu, dengan sendirinya, tidak benar-benar melakukan apa pun selain menggambarkan segmen waktu. Ini adalah objek garis Clock waktu yang melakukan pekerjaan nyata: ini mempertahankan status run-time terkait waktu untuk garis waktu. Dalam kebanyakan kasus, seperti saat menggunakan papan cerita, jam dibuat secara otomatis untuk garis waktu Anda. Anda juga dapat membuat Clock secara eksplisit dengan menggunakan metode .CreateClock Untuk informasi selengkapnya tentang Clock objek, lihat Gambaran Umum Animasi dan Sistem Pengaturan Waktu.
Mengapa Menggunakan Peristiwa?
Dengan pengecualian satu (pencarian selaras dengan tick terakhir), semua operasi pengaturan waktu interaktif tidak sinkron. Tidak ada cara bagi Anda untuk mengetahui dengan tepat kapan mereka akan mengeksekusi. Itu bisa menjadi masalah ketika Anda memiliki kode lain yang bergantung pada operasi waktu Anda. Misalkan Anda ingin menghentikan garis waktu yang menganimasikan persegi panjang. Setelah garis waktu berhenti, Anda mengubah warna persegi panjang.
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
Dalam contoh sebelumnya, baris kedua kode mungkin dijalankan sebelum papan cerita berhenti. Itu karena berhenti adalah operasi asinkron. Memberi tahu garis waktu atau jam untuk berhenti membuat "hentikan permintaan" dari jenis yang tidak diproses hingga centang mesin waktu berikutnya.
Untuk menjalankan perintah setelah garis waktu selesai, gunakan peristiwa pengaturan waktu. Dalam contoh berikut, penanganan aktivitas digunakan untuk mengubah warna persegi panjang setelah papan cerita berhenti diputar.
// 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
Untuk contoh yang lebih lengkap, lihat Menerima Pemberitahuan Saat Status Jam Berubah.
Acara Publik
Kelas Timeline dan Clock keduanya menyediakan lima peristiwa waktu. Tabel berikut mencantumkan peristiwa ini dan kondisi yang memicunya.
Event | Memicu operasi interaktif | Pemicu lainnya |
---|---|---|
Selesai | Lewati untuk mengisi | Jam selesai. |
CurrentGlobalSpeedInvalidated | Jeda, lanjutkan, cari, atur rasio kecepatan, lewati untuk mengisi, menghentikan | Jam membalik, mempercepat, memulai, atau berhenti. |
CurrentStateInvalidated | Mulai, lewati untuk mengisi, menghentikan | Jam dimulai, berhenti, atau terisi. |
CurrentTimeInvalidated | Mulai, cari, lewati untuk mengisi, menghentikan | Jam berlangsung. |
RemoveRequested | Hapus |
Ticking dan Konsolidasi Peristiwa
Saat Anda menganimasikan objek di WPF, itu adalah mesin waktu yang mengelola animasi Anda. Mesin waktu melacak perkembangan waktu dan menghitung status setiap animasi. Itu membuat banyak evaluasi tersebut lolos dalam hitungan detik. Lolos evaluasi ini dikenal sebagai "kutu."
Sementara kutu sering terjadi, ada kemungkinan banyak hal terjadi di antara kutu. Misalnya, garis waktu mungkin dihentikan, dimulai, dan dihentikan lagi, dalam hal ini statusnya saat ini akan berubah tiga kali. Secara teori, peristiwa dapat dimunculkan beberapa kali dalam satu tanda centang; namun, mesin waktu mengonsolidasikan peristiwa, sehingga setiap peristiwa dapat dinaikkan paling banyak sekali per tick.
Mendaftar untuk Peristiwa
Ada dua cara untuk mendaftar untuk peristiwa waktu: Anda dapat mendaftar dengan garis waktu atau dengan jam yang dibuat dari garis waktu. Mendaftar untuk acara secara langsung dengan jam cukup mudah, meskipun hanya dapat dilakukan dari kode. Anda dapat mendaftar untuk peristiwa dengan garis waktu dari markup atau kode. Bagian berikutnya menjelaskan cara mendaftar untuk peristiwa jam dengan garis waktu.
Mendaftar untuk Peristiwa Jam dengan Garis Waktu
Meskipun peristiwa , , CurrentGlobalSpeedInvalidated, CurrentStateInvalidated, CurrentTimeInvalidateddan RemoveRequested garis Completedwaktu tampaknya dikaitkan dengan garis waktu, mendaftar untuk peristiwa ini benar-benar mengaitkan penanganan aktivitas dengan Clock yang dibuat untuk garis waktu.
Ketika Anda mendaftar untuk Completed peristiwa pada garis waktu, misalnya, Anda benar-benar memberi tahu sistem untuk mendaftar untuk Completed peristiwa setiap jam yang dibuat untuk garis waktu. Dalam kode, Anda harus mendaftar untuk peristiwa ini sebelum Clock dibuat untuk garis waktu ini; jika tidak, Anda tidak akan menerima pemberitahuan. Ini terjadi secara otomatis di XAML; pengurai secara otomatis mendaftar untuk peristiwa sebelum Clock dibuat.
Baca juga
.NET Desktop feedback