Gambaran Umum Animasi
Windows Presentation Foundation (WPF) menyediakan serangkaian fitur grafis dan tata letak yang kuat yang memungkinkan Anda membuat antarmuka pengguna yang menarik dan dokumen yang menarik. Animasi dapat membuat antarmuka pengguna yang menarik bahkan lebih spektakuler dan dapat digunakan. Dengan hanya menganimasikan warna latar belakang atau menerapkan animasi Transform, Anda dapat membuat transisi layar dramatis atau memberikan isjin visual yang bermanfaat.
Gambaran umum ini memberikan pengantar animasi WPF dan sistem waktu. Ini berfokus pada animasi objek WPF dengan menggunakan papan cerita.
Memperkenalkan Animasi
Animasi adalah ilusi yang dibuat dengan cepat bersepeda melalui serangkaian gambar, masing-masing sedikit berbeda dari yang terakhir. Otak melihat sekelompok gambar sebagai satu adegan yang berubah. Dalam film, ilusi ini dibuat dengan menggunakan kamera yang merekam banyak foto, atau bingkai, setiap detik. Saat bingkai diputar kembali oleh proyektor, audiens akan melihat gambar yang bergerak.
Animasi pada komputer serupa. Misalnya, program yang membuat gambar persegi panjang memudar dari tampilan mungkin berfungsi sebagai berikut.
Program ini membuat timer.
Program memeriksa timer pada interval yang ditetapkan untuk melihat berapa banyak waktu yang telah berlalu.
Setiap kali program memeriksa timer, program menghitung nilai opasitas saat ini untuk persegi panjang berdasarkan berapa banyak waktu yang telah berlalu.
Program kemudian memperbarui persegi panjang dengan nilai baru dan menggambar ulang.
Sebelum WPF, pengembang Microsoft Windows harus membuat dan mengelola sistem waktu mereka sendiri atau menggunakan pustaka kustom khusus. WPF mencakup sistem pengaturan waktu efisien yang diekspos melalui kode terkelola dan XAML dan yang terintegrasi secara mendalam ke dalam kerangka kerja WPF. Animasi WPF memudahkan untuk menganimasikan kontrol dan objek grafis lainnya.
WPF menangani semua pekerjaan di balik layar dalam mengelola sistem waktu dan menggambar ulang layar secara efisien. Ini menyediakan kelas pengaturan waktu yang memungkinkan Anda untuk fokus pada efek yang ingin Anda buat, alih-alih mekanika mencapai efek tersebut. WPF juga memudahkan untuk membuat animasi Anda sendiri dengan mengekspos kelas dasar animasi tempat kelas Anda dapat mewarisi, untuk menghasilkan animasi yang disesuaikan. Animasi kustom ini mendapatkan banyak manfaat performa dari kelas animasi standar.
Sistem Animasi Properti WPF
Jika Anda memahami beberapa konsep penting tentang sistem waktu, animasi WPF dapat lebih mudah digunakan. Yang paling penting adalah bahwa, dalam WPF, Anda menganimasikan objek dengan menerapkan animasi ke properti masing-masing. Misalnya, untuk membuat elemen kerangka kerja tumbuh, Anda menganimasikan properti dan Height miliknyaWidth. Untuk membuat objek memudar dari tampilan, Anda menganimasikan propertinya Opacity .
Agar properti memiliki kemampuan animasi, properti harus memenuhi tiga persyaratan berikut:
Ini harus menjadi properti dependensi.
Ini harus termasuk dalam kelas yang mewarisi dari DependencyObject dan mengimplementasikan IAnimatable antarmuka.
Harus ada tipe animasi yang kompatibel yang tersedia. (Jika WPF tidak menyediakannya, Anda dapat membuat sendiri. Lihat Gambaran Umum Animasi Kustom.)
WPF berisi banyak objek yang memiliki IAnimatable properti. Kontrol seperti Button dan TabControl, dan juga Panel dan Shape objek mewarisi dari DependencyObject. Sebagian besar propertinya adalah properti dependensi.
Anda dapat menggunakan animasi hampir di mana saja, yang mencakup dalam gaya dan templat kontrol. Animasi tidak harus visual; Anda dapat menganimasikan objek yang bukan bagian dari antarmuka pengguna jika memenuhi kriteria yang dijelaskan di bagian ini.
Contoh: Membuat Elemen Memudar Masuk dan Tidak Terlihat
Contoh ini menunjukkan cara menggunakan animasi WPF untuk menganimasikan nilai properti dependensi. Ini menggunakan DoubleAnimation, yang merupakan jenis animasi yang menghasilkan Double nilai, untuk menganimasikan Opacity properti dari Rectangle. Akibatnya, memudar Rectangle masuk dan tidak terlihat.
Bagian pertama dari contoh membuat Rectangle elemen. Langkah-langkah berikut menunjukkan cara membuat animasi dan menerapkannya ke properti persegi panjang Opacity .
Berikut ini menunjukkan cara membuat Rectangle elemen di StackPanel XAML.
<StackPanel Margin="10">
<Rectangle
Name="MyRectangle"
Width="100"
Height="100"
Fill="Blue">
</Rectangle>
</StackPanel>
Berikut ini menunjukkan cara membuat Rectangle elemen dalam StackPanel kode.
var myPanel = new StackPanel();
myPanel.Margin = new Thickness(10);
var myRectangle = new Rectangle();
myRectangle.Name = "myRectangle";
this.RegisterName(myRectangle.Name, myRectangle);
myRectangle.Width = 100;
myRectangle.Height = 100;
myRectangle.Fill = Brushes.Blue;
myPanel.Children.Add(myRectangle);
this.Content = myPanel;
Dim myPanel As New StackPanel()
myPanel.Margin = New Thickness(10)
Dim myRectangle As New Rectangle()
myRectangle.Name = "myRectangle"
Me.RegisterName(myRectangle.Name, myRectangle)
myRectangle.Width = 100
myRectangle.Height = 100
myRectangle.Fill = Brushes.Blue
myPanel.Children.Add(myRectangle)
Me.Content = myPanel
Bagian 1: Membuat DoubleAnimation
Salah satu cara untuk membuat elemen memudar masuk dan keluar dari tampilan adalah dengan menganimasikan propertinya Opacity . Opacity Karena properti berjenis Double, Anda memerlukan animasi yang menghasilkan nilai ganda. Adalah DoubleAnimation salah satu animasi seperti itu. Membuat DoubleAnimation transisi antara dua nilai ganda. Untuk menentukan nilai awalnya, Anda mengatur propertinya From . Untuk menentukan nilai akhirnya, Anda mengatur propertinya To .
Nilai keburaman
1.0
membuat objek benar-benar buram, dan nilai keburaman0.0
membuatnya benar-benar tidak terlihat. Untuk membuat transisi animasi dari1.0
ke0.0
Anda mengatur propertinya From ke1.0
dan propertinya To ke0.0
. Berikut ini menunjukkan cara membuat DoubleAnimation di XAML.<DoubleAnimation From="1.0" To="0.0" />
Berikut ini memperlihatkan cara membuat DoubleAnimation dalam kode.
var myDoubleAnimation = new DoubleAnimation(); myDoubleAnimation.From = 1.0; myDoubleAnimation.To = 0.0;
Dim myDoubleAnimation As New DoubleAnimation() myDoubleAnimation.From = 1.0 myDoubleAnimation.To = 0.0
Selanjutnya, Anda harus menentukan Duration. Animasi Duration menentukan berapa lama waktu yang diperlukan untuk berubah dari nilai awalnya ke nilai tujuannya. Berikut ini menunjukkan cara mengatur Duration ke lima detik di XAML.
<DoubleAnimation From="1.0" To="0.0" Duration="0:0:5" />
Berikut ini menunjukkan cara mengatur Duration ke lima detik dalam kode.
myDoubleAnimation.Duration = new Duration(TimeSpan.FromSeconds(5));
myDoubleAnimation.Duration = New Duration(TimeSpan.FromSeconds(5))
Kode sebelumnya menunjukkan animasi yang beralih dari
1.0
ke0.0
, yang menyebabkan elemen target memudar dari benar-benar buram menjadi benar-benar tidak terlihat. Untuk membuat elemen memudar kembali ke tampilan setelah menghilang, atur AutoReverse properti animasi ketrue
. Untuk membuat animasi berulang tanpa batas waktu, atur propertinya RepeatBehavior ke Forever. Berikut ini menunjukkan cara mengatur AutoReverse properti dan RepeatBehavior di XAML.<DoubleAnimation From="1.0" To="0.0" Duration="0:0:5" AutoReverse="True" RepeatBehavior="Forever"/>
Berikut ini memperlihatkan cara mengatur AutoReverse properti dan RepeatBehavior dalam kode.
myDoubleAnimation.AutoReverse = true; myDoubleAnimation.RepeatBehavior = RepeatBehavior.Forever;
myDoubleAnimation.AutoReverse = True myDoubleAnimation.RepeatBehavior = RepeatBehavior.Forever
Bagian 2: Membuat Storyboard
Untuk menerapkan animasi ke objek, Anda membuat Storyboard dan menggunakan TargetName properti terlampir dan TargetProperty untuk menentukan objek dan properti untuk dianimasikan.
Storyboard Buat dan tambahkan animasi sebagai anaknya. Berikut ini menunjukkan cara membuat Storyboard di XAML.
<Storyboard> <DoubleAnimation From="1.0" To="0.0" Duration="0:0:1" AutoReverse="True" RepeatBehavior="Forever" /> </Storyboard>
Untuk membuat Storyboard dalam kode, deklarasikan Storyboard variabel di tingkat kelas.
public partial class MainWindow : Window { private Storyboard myStoryboard;
Class MainWindow Private myStoryboard As Storyboard
Kemudian inisialisasi Storyboard dan tambahkan animasi sebagai anaknya.
myStoryboard = new Storyboard(); myStoryboard.Children.Add(myDoubleAnimation);
myStoryboard = New Storyboard() myStoryboard.Children.Add(myDoubleAnimation)
Harus Storyboard tahu di mana harus menerapkan animasi. Storyboard.TargetName Gunakan properti terlampir untuk menentukan objek yang akan dianimasikan. Berikut ini menunjukkan cara mengatur nama DoubleAnimation target ke
MyRectangle
di XAML.<Storyboard> <DoubleAnimation Storyboard.TargetName="MyRectangle" From="1.0" To="0.0" Duration="0:0:1" AutoReverse="True" RepeatBehavior="Forever" /> </Storyboard>
Berikut ini memperlihatkan cara mengatur nama target ke DoubleAnimation
MyRectangle
dalam kode.Storyboard.SetTargetName(myDoubleAnimation, myRectangle.Name);
Storyboard.SetTargetName(myDoubleAnimation, myRectangle.Name)
TargetProperty Gunakan properti terlampir untuk menentukan properti yang akan dianimasikan. Berikut ini menunjukkan bagaimana animasi dikonfigurasi untuk menargetkan Opacity properti Rectangle di XAML.
<Storyboard> <DoubleAnimation Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Opacity" From="1.0" To="0.0" Duration="0:0:5" AutoReverse="True" RepeatBehavior="Forever" /> </Storyboard>
Berikut ini memperlihatkan bagaimana animasi dikonfigurasi untuk menargetkan Opacity properti dalam Rectangle kode.
Storyboard.SetTargetProperty(myDoubleAnimation, new PropertyPath(Rectangle.OpacityProperty));
Storyboard.SetTargetProperty(myDoubleAnimation, New PropertyPath(Rectangle.OpacityProperty))
Untuk informasi selengkapnya tentang TargetProperty sintaksis dan untuk contoh tambahan, lihat Ringkasan Papan Cerita.
Bagian 3 (XAML): Kaitkan Papan Cerita dengan Pemicu
Cara term mudah untuk menerapkan dan memulai Storyboard di XAML adalah dengan menggunakan pemicu peristiwa. Bagian ini menunjukkan cara mengaitkan Storyboard dengan pemicu di XAML.
Buat BeginStoryboard objek dan kaitkan papan cerita Anda dengannya. BeginStoryboard adalah jenis TriggerAction yang berlaku dan memulai Storyboard.
<BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Opacity" From="1.0" To="0.0" Duration="0:0:5" AutoReverse="True" RepeatBehavior="Forever" /> </Storyboard> </BeginStoryboard>
EventTrigger Buat dan tambahkan ke BeginStoryboard koleksinyaActions. Atur RoutedEvent properti ke peristiwa yang dirutekan EventTrigger yang ingin Anda mulai Storyboard. (Untuk informasi selengkapnya tentang peristiwa yang dirutekan , lihatGambaran Umum Peristiwa Yang Dirutekan.)
<!-- Animates the rectangle's opacity. --> <EventTrigger RoutedEvent="Rectangle.Loaded"> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Opacity" From="1.0" To="0.0" Duration="0:0:5" AutoReverse="True" RepeatBehavior="Forever" /> </Storyboard> </BeginStoryboard> </EventTrigger>
Tambahkan ke EventTrigger Triggers koleksi Persegi Panjang.
<Rectangle Name="MyRectangle" Width="100" Height="100" Fill="Blue"> <Rectangle.Triggers> <!-- Animates the rectangle's opacity. --> <EventTrigger RoutedEvent="Rectangle.Loaded"> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetName="MyRectangle" Storyboard.TargetProperty="Opacity" From="1.0" To="0.0" Duration="0:0:5" AutoReverse="True" RepeatBehavior="Forever" /> </Storyboard> </BeginStoryboard> </EventTrigger> </Rectangle.Triggers> </Rectangle>
Bagian 3 (Kode): Kaitkan Papan Cerita dengan Penanganan Aktivitas
Cara term mudah untuk menerapkan dan memulai Storyboard dalam kode adalah dengan menggunakan penanganan aktivitas. Bagian ini memperlihatkan cara mengaitkan Storyboard dengan penanganan aktivitas dalam kode.
Daftar untuk Loaded peristiwa persegi panjang.
myRectangle.Loaded += new RoutedEventHandler(myRectangleLoaded);
AddHandler myRectangle.Loaded, AddressOf myRectangleLoaded
Deklarasikan penanganan aktivitas. Di penanganan aktivitas, gunakan Begin metode untuk menerapkan papan cerita.
private void myRectangleLoaded(object sender, RoutedEventArgs e) { myStoryboard.Begin(this); }
Private Sub myRectangleLoaded(ByVal sender As Object, ByVal e As RoutedEventArgs) myStoryboard.Begin(Me) End Sub
Contoh Lengkap
Berikut ini menunjukkan cara membuat persegi panjang yang memudar masuk dan tidak terlihat di XAML.
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<StackPanel Margin="10">
<Rectangle
Name="MyRectangle"
Width="100"
Height="100"
Fill="Blue">
<Rectangle.Triggers>
<!-- Animates the rectangle's opacity. -->
<EventTrigger RoutedEvent="Rectangle.Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="MyRectangle"
Storyboard.TargetProperty="Opacity"
From="1.0" To="0.0" Duration="0:0:5"
AutoReverse="True" RepeatBehavior="Forever" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Rectangle.Triggers>
</Rectangle>
</StackPanel>
</Grid>
</Window>
Berikut ini memperlihatkan cara membuat persegi panjang yang memudar masuk dan keluar dari tampilan dalam kode.
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Shapes;
using System.Windows.Media.Animation;
namespace WpfApplication1
{
public partial class MainWindow : Window
{
private Storyboard myStoryboard;
public MainWindow()
{
InitializeComponent();
StackPanel myPanel = new StackPanel();
myPanel.Margin = new Thickness(10);
Rectangle myRectangle = new Rectangle();
myRectangle.Name = "myRectangle";
this.RegisterName(myRectangle.Name, myRectangle);
myRectangle.Width = 100;
myRectangle.Height = 100;
myRectangle.Fill = Brushes.Blue;
DoubleAnimation myDoubleAnimation = new DoubleAnimation();
myDoubleAnimation.From = 1.0;
myDoubleAnimation.To = 0.0;
myDoubleAnimation.Duration = new Duration(TimeSpan.FromSeconds(5));
myDoubleAnimation.AutoReverse = true;
myDoubleAnimation.RepeatBehavior = RepeatBehavior.Forever;
myStoryboard = new Storyboard();
myStoryboard.Children.Add(myDoubleAnimation);
Storyboard.SetTargetName(myDoubleAnimation, myRectangle.Name);
Storyboard.SetTargetProperty(myDoubleAnimation, new PropertyPath(Rectangle.OpacityProperty));
// Use the Loaded event to start the Storyboard.
myRectangle.Loaded += new RoutedEventHandler(myRectangleLoaded);
myPanel.Children.Add(myRectangle);
this.Content = myPanel;
}
private void myRectangleLoaded(object sender, RoutedEventArgs e)
{
myStoryboard.Begin(this);
}
}
}
Imports System.Windows.Media.Animation
Class MainWindow
Private myStoryboard As Storyboard
Public Sub New()
InitializeComponent()
Dim myPanel As New StackPanel()
myPanel.Margin = New Thickness(10)
Dim myRectangle As New Rectangle()
myRectangle.Name = "myRectangle"
Me.RegisterName(myRectangle.Name, myRectangle)
myRectangle.Width = 100
myRectangle.Height = 100
myRectangle.Fill = Brushes.Blue
Dim myDoubleAnimation As New DoubleAnimation()
myDoubleAnimation.From = 1.0
myDoubleAnimation.To = 0.0
myDoubleAnimation.Duration = New Duration(TimeSpan.FromSeconds(5))
myDoubleAnimation.AutoReverse = True
myDoubleAnimation.RepeatBehavior = RepeatBehavior.Forever
myStoryboard = New Storyboard()
myStoryboard.Children.Add(myDoubleAnimation)
Storyboard.SetTargetName(myDoubleAnimation, myRectangle.Name)
Storyboard.SetTargetProperty(myDoubleAnimation, New PropertyPath(Rectangle.OpacityProperty))
' Use the Loaded event to start the Storyboard.
AddHandler myRectangle.Loaded, AddressOf myRectangleLoaded
myPanel.Children.Add(myRectangle)
Me.Content = myPanel
End Sub
Private Sub myRectangleLoaded(ByVal sender As Object, ByVal e As RoutedEventArgs)
myStoryboard.Begin(Me)
End Sub
End Class
Tipe Animasi
Karena animasi menghasilkan nilai properti, tipe animasi yang berbeda ada untuk tipe properti yang berbeda. Untuk menganimasikan properti yang mengambil Double, seperti Width properti elemen, gunakan animasi yang menghasilkan Double nilai. Untuk menganimasikan properti yang mengambil Point, gunakan animasi yang menghasilkan Point nilai, dan sebagainya. Karena jumlah jenis properti yang berbeda, ada beberapa kelas animasi di System.Windows.Media.Animation namespace layanan. Untungnya, mereka mengikuti konvensi penamaan ketat yang memudahkan untuk membedakannya:
<Ketik>Animasi
Dikenal sebagai animasi "Dari/Ke/Oleh" atau "dasar", animasi ini antara nilai awal dan tujuan, atau dengan menambahkan nilai offset ke nilai awalnya.
Untuk menentukan nilai awal, atur properti Dari animasi.
Untuk menentukan nilai akhir, atur properti Ke animasi.
Untuk menentukan nilai offset, atur properti Menurut animasi.
Contoh dalam gambaran umum ini menggunakan animasi ini, karena ini adalah yang paling sederhana untuk digunakan. Animasi Dari/Ke/Menurut dijelaskan secara rinci dalam Gambaran Umum Animasi Dari/Ke/Menurut.
<Ketik>AnimationUsingKeyFrames
Animasi bingkai kunci lebih kuat daripada animasi Dari/Ke/Menurut karena Anda dapat menentukan sejumlah nilai target dan bahkan mengontrol metode interpolasinya. Beberapa jenis hanya dapat dianimasikan dengan animasi bingkai kunci. Animasi bingkai kunci dijelaskan secara rinci dalam Gambaran Umum Animasi Key-Frame.
<Ketik>AnimationUsingPath
Animasi jalur memungkinkan Anda menggunakan jalur geometrik untuk menghasilkan nilai animasi.
<Ketik AnimationBase>
Kelas abstrak yang, saat Anda menerapkannya, menganimasikan <nilai Jenis> . Kelas ini berfungsi sebagai kelas dasar untuk <kelas Type>Animation dan <Type>AnimationUsingKeyFrames. Anda harus berurusan langsung dengan kelas-kelas ini hanya jika Anda ingin membuat animasi kustom Anda sendiri. Jika tidak, gunakan <Animasi Tipe>atau Animasi Jenis>KeyFrame<.
Dalam kebanyakan kasus, Anda ingin menggunakan <kelas Jenis>Animasi, seperti DoubleAnimation dan ColorAnimation.
Tabel berikut ini memperlihatkan beberapa jenis animasi umum dan beberapa properti yang digunakan.
Jenis properti | Animasi dasar (Dari/Ke/Oleh) yang sesuai | Animasi bingkai kunci yang sesuai | Animasi Jalur Terkait | Contoh penggunaan |
---|---|---|---|---|
Color | ColorAnimation | ColorAnimationUsingKeyFrames | Tidak | Animasikan Color dari SolidColorBrush atau GradientStop. |
Double | DoubleAnimation | DoubleAnimationUsingKeyFrames | DoubleAnimationUsingPath | Animasikan Width dari DockPanel atau Height dari Button. |
Point | PointAnimation | PointAnimationUsingKeyFrames | PointAnimationUsingPath | Animasikan Center posisi EllipseGeometry. |
String | Tidak | StringAnimationUsingKeyFrames | Tidak | Animasikan Text dari TextBlock atau Content dari Button. |
Animasi Adalah Garis Waktu
Semua jenis animasi yang diwarisi dari Timeline kelas; oleh karena itu, semua animasi adalah jenis garis waktu khusus. mendefinisikan Timeline segmen waktu. Anda dapat menentukan perilaku waktu garis waktu: Duration, berapa kali diulang, dan bahkan seberapa cepat waktu berlangsung untuk itu.
Karena animasi adalah Timeline, animasi juga mewakili segmen waktu. Animasi juga menghitung nilai output saat berlangsung melalui segmen waktu yang ditentukan (atau Duration). Saat animasi berlangsung, atau "diputar", animasi memperbarui properti yang terkait dengannya.
Tiga properti pengaturan waktu yang sering digunakan adalah Duration, , AutoReversedan RepeatBehavior.
Properti Durasi
Seperti yang disebutkan sebelumnya, garis waktu mewakili segmen waktu. Panjang segmen tersebut ditentukan oleh Duration garis waktu, yang biasanya ditentukan dengan menggunakan TimeSpan nilai. Ketika garis waktu mencapai akhir durasinya, garis waktu telah menyelesaikan iterasi.
Animasi menggunakan propertinya Duration untuk menentukan nilainya saat ini. Jika Anda tidak menentukan Duration nilai untuk animasi, nilai tersebut menggunakan 1 detik, yang merupakan default.
Sintaks berikut menunjukkan versi yang disederhanakan dari sintaks atribut Extensible Application Markup Language (XAML) untuk properti .Duration
jam :
menit :
detik
Tabel berikut ini memperlihatkan beberapa Duration pengaturan dan nilai yang dihasilkan.
Pengaturan | Nilai yang dihasilkan |
---|---|
0:0:5.5 | 5,5 detik. |
0:30:5.5 | 30 menit dan 5,5 detik. |
1:30:5.5 | 1 jam, 30 menit, dan 5,5 detik. |
Salah satu cara untuk menentukan Duration dalam kode adalah dengan menggunakan FromSeconds metode untuk membuat TimeSpan, lalu mendeklarasikan struktur baru Duration menggunakan .TimeSpan
Untuk informasi selengkapnya tentang Duration nilai dan sintaks Extensible Application Markup Language (XAML) lengkap, lihat strukturnya Duration .
Putar Otomatis
Properti AutoReverse menentukan apakah garis waktu diputar mundur setelah mencapai akhir Duration. Jika Anda mengatur properti animasi ini ke true
, animasi terbalik setelah mencapai akhir Duration, memutar dari nilai akhirnya kembali ke nilai awalnya. Secara default, properti ini adalah false
.
RepeatBehavior
Properti RepeatBehavior menentukan berapa kali garis waktu diputar. Secara default, garis waktu memiliki jumlah 1.0
iterasi , yang berarti mereka bermain satu kali dan tidak mengulangi sama sekali.
Untuk informasi selengkapnya tentang properti ini dan lainnya, lihat Gambaran Umum Perilaku Pengaturan Waktu.
Menerapkan Animasi ke Properti
Bagian sebelumnya menjelaskan berbagai jenis animasi dan properti waktunya. Bagian ini memperlihatkan cara menerapkan animasi ke properti yang ingin Anda animasikan. Storyboard objek menyediakan salah satu cara untuk menerapkan animasi ke properti. adalah Storyboard garis waktu kontainer yang menyediakan informasi penargetan untuk animasi yang dikandungnya.
Menargetkan Objek dan Properti
Kelas Storyboard menyediakan properti yang TargetName terlampir dan TargetProperty . Dengan mengatur properti ini pada animasi, Anda memberi tahu animasi apa yang harus dianimasikan. Namun, sebelum animasi dapat menargetkan objek, objek biasanya harus diberi nama.
Menetapkan nama ke FrameworkElement berbeda dari menetapkan nama ke Freezable objek. Sebagian besar kontrol dan panel adalah elemen kerangka kerja; namun, sebagian besar objek grafis murni, seperti kuas, transformasi, dan geometri, adalah objek yang dapat dibekukan. Jika Anda tidak yakin apakah jenis adalah FrameworkElement atau Freezable, lihat bagian Hierarki Warisan dari dokumentasi referensinya.
Untuk membuat FrameworkElement target animasi, Anda memberinya nama dengan mengatur propertinya Name . Dalam kode, Anda juga harus menggunakan RegisterName metode untuk mendaftarkan nama elemen dengan halaman tempatnya berada.
Untuk menjadikan objek sebagai Freezable target animasi di XAML, Anda menggunakan x:Name Directive untuk menetapkan nama. Dalam kode, Anda hanya menggunakan RegisterName metode untuk mendaftarkan objek dengan halaman tempat objek tersebut berada.
Bagian berikut memberikan contoh penamaan elemen di XAML dan kode. Untuk informasi selengkapnya tentang penamaan dan penargetan, lihat Gambaran Umum Papan Cerita.
Menerapkan dan Memulai Papan Cerita
Untuk memulai papan cerita di XAML, Anda mengaitkannya dengan EventTrigger. Adalah EventTrigger objek yang menjelaskan tindakan apa yang harus diambil ketika peristiwa tertentu terjadi. Salah satu tindakan tersebut bisa menjadi BeginStoryboard tindakan, yang Anda gunakan untuk memulai papan cerita Anda. Pemicu peristiwa serupa dalam konsep dengan penanganan aktivitas karena memungkinkan Anda menentukan bagaimana aplikasi Anda merespons peristiwa tertentu. Tidak seperti penanganan aktivitas, pemicu peristiwa dapat sepenuhnya dijelaskan di XAML; tidak ada kode lain yang diperlukan.
Untuk memulai Storyboard dalam kode, Anda dapat menggunakan EventTrigger atau menggunakan Begin metode Storyboard kelas .
Mengontrol Papan Cerita secara interaktif
Contoh sebelumnya menunjukkan cara memulai Storyboard saat peristiwa terjadi. Anda juga dapat mengontrol Storyboard secara interaktif setelah dimulai: Anda dapat menjeda, melanjutkan, menghentikan, memajukannya ke periode pengisiannya, mencari, dan menghapus Storyboard. Untuk informasi selengkapnya dan contoh yang memperlihatkan cara mengontrol Storyboardsecara interaktif , lihat Gambaran Umum Papan Cerita.
Apa yang Terjadi Setelah Animasi Berakhir?
Properti FillBehavior menentukan bagaimana garis waktu berulah ketika berakhir. Secara default, garis waktu dimulai Filling saat berakhir. Animasi yang Filling menyimpan nilai output akhirnya.
Dalam DoubleAnimation contoh sebelumnya tidak berakhir karena propertinya RepeatBehavior diatur ke Forever. Contoh berikut menganimasikan persegi panjang dengan menggunakan animasi serupa. Tidak seperti contoh sebelumnya, RepeatBehavior properti dan AutoReverse animasi ini dibiarkan pada nilai defaultnya. Oleh karena itu, animasi berlangsung dari 1 hingga 0 selama lima detik dan kemudian berhenti.
<Rectangle
Name="MyRectangle"
Width="100"
Height="100"
Fill="Blue">
<Rectangle.Triggers>
<!-- Animates the rectangle's opacity. -->
<EventTrigger RoutedEvent="Rectangle.Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="MyRectangle"
Storyboard.TargetProperty="Opacity"
From="1.0" To="0" Duration="0:0:5" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Rectangle.Triggers>
</Rectangle>
DoubleAnimation myDoubleAnimation = new DoubleAnimation();
myDoubleAnimation.From = 1.0;
myDoubleAnimation.To = 0.0;
myDoubleAnimation.Duration = new Duration(TimeSpan.FromSeconds(5));
Dim myDoubleAnimation As New DoubleAnimation()
myDoubleAnimation.From = 1.0
myDoubleAnimation.To = 0.0
myDoubleAnimation.Duration = New Duration(TimeSpan.FromSeconds(5))
FillBehavior Karena tidak diubah dari nilai defaultnya, yaitu HoldEnd, animasi menyimpan nilai akhirnya, 0, ketika berakhir. Oleh karena itu, Opacity persegi panjang tetap pada 0 setelah animasi berakhir. Jika Anda mengatur Opacity persegi panjang ke nilai lain, kode Anda tampaknya tidak berpengaruh, karena animasi masih memengaruhi Opacity properti .
Salah satu cara untuk mendapatkan kembali kontrol properti animasi dalam kode adalah dengan menggunakan BeginAnimation metode dan menentukan null untuk AnimationTimeline parameter . Untuk informasi selengkapnya dan contohnya, lihat Mengatur Properti Setelah Menganimasikannya dengan Storyboard.
Perhatikan bahwa, meskipun mengatur nilai properti yang memiliki Active animasi atau Filling tampaknya tidak berpengaruh, nilai properti berubah. Untuk informasi selengkapnya, lihat Gambaran Umum Animasi dan Sistem Pengaturan Waktu.
Pengikatan Data dan Animasi Animasi
Sebagian besar properti animasi dapat terikat data atau dianimasikan; misalnya, Anda dapat menganimasikan Duration properti dari DoubleAnimation. Namun, karena cara kerja sistem waktu, animasi terikat data atau animasi tidak bereaksi seperti data lain yang terikat atau objek animasi. Untuk memahami perilaku mereka, ini membantu memahami apa artinya menerapkan animasi ke properti.
Lihat contoh di bagian sebelumnya yang menunjukkan cara menganimasikan Opacity persegi panjang. Ketika persegi panjang dalam contoh sebelumnya dimuat, pemicu peristiwanya menerapkan Storyboard. Sistem waktu membuat salinan Storyboard dan animasinya. Salinan ini dibekukan (dibuat baca-saja) dan Clock objek dibuat darinya. Jam ini melakukan pekerjaan aktual untuk menjiwai properti yang ditargetkan.
Sistem waktu membuat jam untuk DoubleAnimation dan menerapkannya ke objek dan properti yang ditentukan oleh TargetName dan TargetProperty dari DoubleAnimation. Dalam hal ini, sistem waktu menerapkan jam ke Opacity properti objek yang diberi nama "MyRectangle."
Meskipun jam juga dibuat untuk Storyboard, jam tidak diterapkan ke properti apa pun. Tujuannya adalah untuk mengontrol jam anaknya, jam yang dibuat untuk DoubleAnimation.
Agar animasi mencerminkan pengikatan data atau perubahan animasi, jamnya harus diregenerasi. Jam tidak diregenerasi untuk Anda secara otomatis. Untuk membuat animasi mencerminkan perubahan, terapkan kembali papan ceritanya dengan menggunakan BeginStoryboard atau Begin metode . Saat Anda menggunakan salah satu metode ini, animasi dimulai ulang. Dalam kode, Anda dapat menggunakan Seek metode untuk menggeser papan cerita kembali ke posisi sebelumnya.
Untuk contoh animasi terikat data, lihat Sampel Animasi Key Spline. Untuk informasi selengkapnya tentang cara kerja sistem animasi dan waktu, lihat Gambaran Umum Animasi dan Sistem Pengaturan Waktu.
Cara Lain untuk Menganimasikan
Contoh dalam gambaran umum ini menunjukkan cara menganimasikan dengan menggunakan papan cerita. Saat menggunakan kode, Anda dapat menganimasikan dengan beberapa cara lain. Untuk informasi selengkapnya, lihat Gambaran Umum Teknik Animasi Properti.
Sampel Animasi
Sampel berikut dapat membantu Anda mulai menambahkan animasi ke aplikasi Anda.
Dari, Ke, dan Berdasarkan Sampel Nilai Target Animasi
Menunjukkan pengaturan Dari/Ke/Menurut yang berbeda.
Sampel Perilaku Pengaturan Waktu Animasi
Menunjukkan berbagai cara untuk mengontrol perilaku pengaturan waktu animasi. Sampel ini juga menunjukkan cara mengikat data nilai tujuan animasi.
Topik Terkait
Judul | Deskripsi |
---|---|
Gambaran Umum Sistem Animasi dan Pengaturan Waktu | Menjelaskan bagaimana sistem pengaturan waktu menggunakan Timeline kelas dan Clock , yang memungkinkan Anda membuat animasi. |
Tips dan Trik Animasi | Mencantumkan tips bermanfaat untuk memecahkan masalah dengan animasi, seperti performa. |
Gambaran Umum Animasi Kustom | Menjelaskan cara memperluas sistem animasi dengan bingkai kunci, kelas animasi, atau panggilan balik per bingkai. |
Gambaran Umum Animasi Dari/Ke/Menurut | Menjelaskan cara membuat animasi yang bertransisi di antara dua nilai. |
Gambaran Umum Animasi Key-Frame | Menjelaskan cara membuat animasi dengan beberapa nilai target, termasuk kemampuan untuk mengontrol metode interpolasi. |
Meringankan Fungsi | Menjelaskan cara menerapkan rumus matematika ke animasi Anda untuk mendapatkan perilaku realistis, seperti memantul. |
Gambaran Umum Animasi Jalur | Menjelaskan cara memindahkan atau memutar objek di sepanjang jalur kompleks. |
Gambaran Umum Teknik Animasi Properti | Menjelaskan animasi properti menggunakan papan cerita, animasi lokal, jam, dan animasi per bingkai. |
Gambaran Umum Papan Cerita | Menjelaskan cara menggunakan papan cerita dengan beberapa garis waktu untuk membuat animasi yang kompleks. |
Gambaran Umum Perilaku Pengaturan Waktu | Menjelaskan tipe dan properti yang Timeline digunakan dalam animasi. |
Gambaran Umum Peristiwa Pengaturan Waktu | Menjelaskan peristiwa yang tersedia pada Timeline objek dan Clock untuk mengeksekusi kode di titik-titik di garis waktu, seperti mulai, jeda, lanjutkan, lewati, atau hentikan. |
Topik Cara Penggunaan | Berisi contoh kode untuk menggunakan animasi dan garis waktu di aplikasi Anda. |
Topik Panduan Jam | Berisi contoh kode untuk menggunakan Clock objek di aplikasi Anda. |
Topik Panduan Key-Frame | Berisi contoh kode untuk menggunakan animasi bingkai kunci di aplikasi Anda. |
Topik Cara Animasi Jalur | Berisi contoh kode untuk menggunakan animasi jalur di aplikasi Anda. |
Referensi
.NET Desktop feedback