Bab*_*oey 6 wpf animation xaml user-controls storyboard
我有一个在XAML中定义的动画(作为UserControl),它实际上每秒在两个图像之间切换:
<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>
Run Code Online (Sandbox Code Playgroud)
它可以在窗口中使用:
<!-- Remote -->
<uControl:RemoteAnimation
x:Name="remoteAnimation"
Canvas.Left="316" Canvas.Top="156" Height="246" Width="121" />
Run Code Online (Sandbox Code Playgroud)
我的问题是,当包含动画的窗口关闭时,它会继续运行并导致泄漏.我无法通过带有storyboard.Stop()的RemoteAnimation_Unloaded()来停止动画......它不会做插孔.
我已经检查了这两个帖子,但它们不适用:
我能够进入卸载方法,但调用Stop()不会停止动画.根据我的理解,对于故事板调用Begin()可能是一个问题.isControlable参数存在重载.但是,由于动画完全在XAML中,我不确定如何影响它.
Bab*_*oey 12
看起来我遇到了两个不同的问题:
首先,在.NET 3.5中,故事板动画可以泄漏非托管内存(呃): 链接,链接
由于我没有选择将我的目标更新到.NET 4.0,我使用了链接中描述的补丁,它已经阻止了泄漏.
其次,我能够成功连接到我的UserControl的Unloaded事件,该事件在包含窗口关闭时被调用.我看到其他人在这个事件正常射击时遇到了麻烦,但它似乎对我有用.停止动画的唯一方法(通过XAML使用RepeatBehavior
"Forever"启动)是:
storyboard.Begin(this, true);
storyboard.Stop(this);
Run Code Online (Sandbox Code Playgroud)
这会停止动画并允许GC收集它.
归档时间: |
|
查看次数: |
6591 次 |
最近记录: |