Cara: Mengatur Properti Setelah Menganimasikannya dengan Papan Cerita
Dalam beberapa kasus, mungkin muncul bahwa Anda tidak dapat mengubah nilai properti setelah dianimasikan.
Menganimasikan warna SolidColorBrush
Dalam contoh berikut, Storyboard digunakan untuk menganimasikan warna SolidColorBrush. Papan cerita dipicu saat tombol diklik. Kejadian Completed ditangani sehingga program diberi tahu ketika ColorAnimation selesai.
<Button
Content="Animate and Then Set Example 1">
<Button.Background>
<SolidColorBrush x:Name="Button1BackgroundBrush"
Color="Red" />
</Button.Background>
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<BeginStoryboard>
<Storyboard>
<ColorAnimation
Storyboard.TargetName="Button1BackgroundBrush"
Storyboard.TargetProperty="Color"
From="Red" To="Yellow" Duration="0:0:5"
FillBehavior="HoldEnd"
Completed="setButton1BackgroundBrushColor" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
Mengubah warna kuas
ColorAnimation Setelah selesai, program mencoba mengubah warna kuas menjadi biru.
private void setButton1BackgroundBrushColor(object sender, EventArgs e)
{
// Does not appear to have any effect:
// the brush remains yellow.
Button1BackgroundBrush.Color = Colors.Blue;
}
Private Sub setButton1BackgroundBrushColor(ByVal sender As Object, ByVal e As EventArgs)
' Does not appear to have any effect:
' the brush remains yellow.
Button1BackgroundBrush.Color = Colors.Blue
End Sub
Kode sebelumnya tampaknya tidak melakukan apa-apa: kuas tetap kuning, yang merupakan nilai yang disediakan oleh ColorAnimation yang menanimasikan kuas. Nilai properti yang mendasar (nilai dasar) sebenarnya diubah menjadi biru. Namun, nilai efektif, atau saat ini, tetap kuning karena ColorAnimation masih mengesampingkan nilai dasar. Jika Anda ingin nilai dasar menjadi nilai efektif lagi, Anda harus menghentikan animasi dari berpengaruh pada properti. Ada tiga cara untuk melakukan ini dengan animasi papan cerita:
Atur properti animasi FillBehavior ke Stop
Hapus seluruh Storyboard.
Hapus animasi dari properti individual.
Atur properti FillBehavior animasi ke Berhenti
Dengan mengatur FillBehavior ke Stop, Anda memberi tahu animasi untuk berhenti memengaruhi properti targetnya setelah mencapai akhir periode aktifnya.
<Button
Content="Animate and Then Set Example 2">
<Button.Background>
<SolidColorBrush x:Name="Button2BackgroundBrush"
Color="Red" />
</Button.Background>
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<BeginStoryboard>
<Storyboard>
<ColorAnimation
Storyboard.TargetName="Button2BackgroundBrush"
Storyboard.TargetProperty="Color"
From="Red" To="Yellow" Duration="0:0:5"
FillBehavior="Stop"
Completed="setButton2BackgroundBrushColor" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
private void setButton2BackgroundBrushColor(object sender, EventArgs e)
{
// This appears to work:
// the brush changes to blue.
Button2BackgroundBrush.Color = Colors.Blue;
}
Private Sub setButton2BackgroundBrushColor(ByVal sender As Object, ByVal e As EventArgs)
' This appears to work:
' the brush changes to blue.
Button2BackgroundBrush.Color = Colors.Blue
End Sub
Menghapus seluruh papan cerita
Dengan menggunakan RemoveStoryboard pemicu atau Storyboard.Remove metode , Anda memberi tahu animasi papan cerita untuk berhenti memengaruhi properti targetnya. Perbedaan antara pendekatan ini dan mengatur FillBehavior properti adalah Anda dapat menghapus papan cerita kapan saja, sementara FillBehavior properti hanya memiliki efek ketika animasi mencapai akhir periode aktifnya.
<Button
Name="Button3"
Content="Animate and Then Set Example 3">
<Button.Background>
<SolidColorBrush x:Name="Button3BackgroundBrush"
Color="Red" />
</Button.Background>
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<BeginStoryboard Name="MyBeginStoryboard">
<Storyboard x:Name="MyStoryboard">
<ColorAnimation
Storyboard.TargetName="Button3BackgroundBrush"
Storyboard.TargetProperty="Color"
From="Red" To="Yellow" Duration="0:0:5"
FillBehavior="HoldEnd"
Completed="setButton3BackgroundBrushColor" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
private void setButton3BackgroundBrushColor(object sender, EventArgs e)
{
// This appears to work:
// the brush changes to blue.
MyStoryboard.Remove(Button3);
Button3BackgroundBrush.Color = Colors.Blue;
}
Private Sub setButton3BackgroundBrushColor(ByVal sender As Object, ByVal e As EventArgs)
' This appears to work:
' the brush changes to blue.
MyStoryboard.Remove(Button3)
Button3BackgroundBrush.Color = Colors.Blue
End Sub
Menghapus animasi dari properti individual
Teknik lain untuk menghentikan animasi memengaruhi properti adalah dengan menggunakan BeginAnimation(DependencyProperty, AnimationTimeline) metode objek yang dianimasikan. Tentukan properti yang dianimasikan sebagai parameter pertama dan null
sebagai yang kedua.
<Button
Name="Button4"
Content="Animate and Then Set Example 4">
<Button.Background>
<SolidColorBrush x:Name="Button4BackgroundBrush"
Color="Red" />
</Button.Background>
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<BeginStoryboard>
<Storyboard>
<ColorAnimation
Storyboard.TargetName="Button4BackgroundBrush"
Storyboard.TargetProperty="Color"
From="Red" To="Yellow" Duration="0:0:5"
FillBehavior="HoldEnd"
Completed="setButton4BackgroundBrushColor" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
private void setButton4BackgroundBrushColor(object sender, EventArgs e)
{
// This appears to work:
// the brush changes to blue.
Button4BackgroundBrush.BeginAnimation(SolidColorBrush.ColorProperty, null);
Button4BackgroundBrush.Color = Colors.Blue;
}
Private Sub setButton4BackgroundBrushColor(ByVal sender As Object, ByVal e As EventArgs)
' This appears to work:
' the brush changes to blue.
Button4BackgroundBrush.BeginAnimation(SolidColorBrush.ColorProperty, Nothing)
Button4BackgroundBrush.Color = Colors.Blue
End Sub
Teknik ini juga berfungsi untuk animasi non-storyboard.
Baca juga
.NET Desktop feedback
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk