Wie zu stoppen WPF storyboard setzt sich nur in XAML
Ich habe eine animation in XAML definiert (wie ein UserControl), die im wesentlichen Schalter, die zwischen zwei Bildern in jeder Sekunde:
<UserControl x:Class="KaleidoscopeApplication.Controls.RemoteAnimation"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Loaded="RemoteAnimation_Loaded"
Unloaded="RemoteAnimation_Unloaded">
<Grid Canvas.Left="500" Canvas.Top="84">
<Grid.Triggers>
<EventTrigger RoutedEvent="Grid.Loaded">
<BeginStoryboard>
<Storyboard x:Name="storyboard" RepeatBehavior="Forever">
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="remote2" BeginTime="00:00:00" Storyboard.TargetProperty="(UIElement.Visibility)">
<DiscreteObjectKeyFrame KeyTime="0:0:1">
<DiscreteObjectKeyFrame.Value>
<Visibility>Collapsed</Visibility>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
<DiscreteObjectKeyFrame KeyTime="0:0:2">
<DiscreteObjectKeyFrame.Value>
<Visibility>Visible</Visibility>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Grid.Triggers>
<Image Name="remote1" Source="/Resources/Elements/Images/341.png"/>
<Image Name="remote2" Source="/Resources/Elements/Images/342.png"/>
</Grid>
</UserControl>
Es kann verwendet werden, in einem Fenster wie folgt:
<!-- Remote -->
<uControl:RemoteAnimation
x:Name="remoteAnimation"
Canvas.Left="316" Canvas.Top="156" Height="246" Width="121" />
Mein problem ist, dass wenn das Fenster mit der animation schließt, es läuft weiter und verursacht ein Leck. Ich bin nicht in der Lage, stoppen der animation über RemoteAnimation_Unloaded() mit storyboard.Stop()... es nicht tun, jack.
Habe ich ausgecheckt, können diese beiden Beiträge, aber Sie nicht anwenden:
Ich bin in der Lage, um in das entladen-Methode, aber das aufrufen der Stop() Stoppt nicht die animation. Aus meinem Verständnis kann es ein Problem mit einem Aufruf von Begin() für das storyboard. Es ist eine überlastung mit einem isControlable parameter. Da jedoch die animation ist komplett in XAML, ich bin mir nicht sicher, wie Sie Einfluss auf diese.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aussieht, ich lief in zwei Probleme:
First off, in .NET 3.5, storyboard Animationen kann Leck nicht verwalteten Speicher (ugh):
Link, Link
Da habe ich nicht die option zum aktualisieren meine Ziele zu .NET 4.0 habe ich den patch verwendet, beschrieben in den links und es hat aufgehört das Leck.
Zweite, ich war in der Lage, erfolgreich Haken bis zu meinem UserControl-Entladen-Ereignis, das aufgerufen wird, wenn es mit Fenster ist geschlossen. Ich sehe andere hatten ärger mit diesem Ereignis auslösen richtig, aber es scheint zu funktionieren für mich. Der einzige Weg, um die Bewegungssimulation zu stoppen (was wurde begonnen, über XAML mit
RepeatBehavior
von "Forever") ist:Dieser Stoppt die animation und ermöglicht die GC zu sammeln.
Bitte Lesen Sie diese beiden Beiträge:
Entladen-Ereignis nicht ausgelöst
Entsorgung Benutzersteuerelemente