Oto moja prosta aplikacja
<UserControl x:Class="fullscreen.MainPage"
...
...
<UserControl.Resources>
<Storyboard x:Name="bounce2">
<DoubleAnimation Storyboard.TargetName="zdj"
Storyboard.TargetProperty="(Opacity)"
From="1" To="0" Duration="0:0:6">
</DoubleAnimation>
</Storyboard>
</UserControl.Resources>
<Canvas Height="410" Name="canvas1" Width="900" Background="White">
<Image Canvas.Left="0" Canvas.Top="0" Height="410" Name="zdj" Stretch="Fill" Width="900"/>
</Canvas>
</UserControl>
Tworzę sobie obrazek i tworze efekt 'zanikania'
w kodzie C# chcę po całkowitym zniknięciu podmienić obrazek na inny (tworzę taką animowaną galerię), robię to w następujący sposób:
zdj.Source = new BitmapImage(new Uri("Images/aa.jpg", UriKind.Relative)); // inny obraz
zdj.UpdateLayout(); // odświeżam powierzchnię
bounce2.Begin(); // to jest od zanikania
bounce2.Completed += new EventHandler(zamiana); // rzucam wyjątek jeśli animacja się skończyła
Jednak to rozwiązanie ma takie wady, że gdy wskoczę do funkcji zamiana , która znów wykonuje podany wyżej kod dla jeszcze innego obrazu, to po kilku takich przewinięciach aplikacja się zawiesza.
Myślę że jest to spowodowane tym że po linijce rzucenia wyjątku, kod i tak dalej się wykonuje... tj. nakładają się na siebie animacje (co potem widać na stronce). Trochę zamieszałem, ale Ciężko to wyjaśnić.
Chcę zrobić coś takiego po prostu:
if(animacja_skonczona) animuj kolejny obraz;
else
{
czekaj dopoki się nie skończy;
}
po prostu nie wiem jak spradzić czy animacja została zakończona.....
albo jakiś delay chociażby by się przydał.