gpt4 book ai didi

wpf - 如何停止仅在XAML中编写的WPF Storyboard

转载 作者:行者123 更新时间:2023-12-04 13:34:48 25 4
gpt4 key购买 nike

我在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>

因此可以在窗口中使用它:
<!-- Remote -->
<uControl:RemoteAnimation
x:Name="remoteAnimation"
Canvas.Left="316" Canvas.Top="156" Height="246" Width="121" />

我的问题是,当包含动画的窗口关闭时,它会继续运行并导致泄漏。我无法通过Storyboard.Stop()的RemoteAnimation_Unloaded()来停止动画...它不起作用。

我已经检查了这两个帖子,但它们并不适用:

Post1
Post2

我可以进入卸载方法,但是调用Stop()不会停止动画。根据我的理解, Storyboard调用Begin()可能是一个问题。有一个isControlable参数的重载。但是,由于动画完全在XAML中,所以我不确定如何影响它。

最佳答案

看来我遇到了两个独立的问题:

首先,在.NET 3.5中, Storyboard 动画可能会泄漏非托管内存(ugh):
LinkLink

由于我没有选择将我的目标更新到.NET 4.0的选项,因此我使用了链接中描述的补丁,它已阻止了泄漏。

其次,我能够成功挂接到UserControl的Unloaded事件,该事件在包含窗口关闭时被调用。我看到其他人在此事件正常触发时遇到了麻烦,但这似乎对我有用。停止动画(通过XAML以RepeatBehavior为“Forever”开始的动画)的唯一方法是:

storyboard.Begin(this, true);
storyboard.Stop(this);

这将停止动画并允许GC收集它。

关于wpf - 如何停止仅在XAML中编写的WPF Storyboard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5391838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com