我有一个WPF应用程序,其中我有4行DataGrid。我有一个DataTrigger来使用BeginStoryBoard为选择设置动画。每次选择更改都会产生一堆内存泄漏。太奇怪了。
<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}, Path=IsSelected}" Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Width" Storyboard.TargetName="valueTextBlock"
To="375" FillBehavior="HoldEnd" BeginTime="00:00:00.0" Duration="00:00:00.4"></DoubleAnimation>
<DoubleAnimation Storyboard.TargetProperty="Width" Storyboard.TargetName="valueTextBlock"
To="375" FillBehavior="HoldEnd" BeginTime="00:00:00.0" Duration="00:00:00.4"></DoubleAnimation>
<DoubleAnimation Storyboard.TargetProperty="Opacity" Storyboard.TargetName="valueTextBlock"
To="1" FillBehavior="HoldEnd" BeginTime="00:00:00.0" Duration="00:00:00.4"></DoubleAnimation>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Width" Storyboard.TargetName="valueTextBlock"
To="300" FillBehavior="HoldEnd" BeginTime="00:00:00.0" Duration="00:00:00.4"></DoubleAnimation>
<DoubleAnimation Storyboard.TargetProperty="Width" Storyboard.TargetName="valueTextBlock"
To="300" FillBehavior="HoldEnd" BeginTime="00:00:00.0" Duration="00:00:00.4"></DoubleAnimation>
<DoubleAnimation Storyboard.TargetProperty="Opacity" Storyboard.TargetName="valueTextBlock"
To="0.5" FillBehavior="HoldEnd" BeginTime="00:00:00.0" Duration="00:00:00.4"></DoubleAnimation>
</Storyboard>
</BeginStoryboard>
</DataTrigger.ExitActions>
<DataTrigger.Setters>
<Setter Property="BorderBrush" Value="{StaticResource brushTextBox_Border_Focused}" TargetName="valueTextBlock" />
</DataTrigger.Setters>
</DataTrigger>
这是在DataTemplate上完成的。并且还将Storyboard添加到DataGridCell样式以在选择行时增加FontSize。我确信,我没有以适当的方式完成动画。但是当我尝试使用RemoveStoryBoard时,动画并不流畅。
任何建议都会有所帮助。
答案 0 :(得分:-1)
我找到了一个解决方案,你必须调用垃圾收集器,因为StoryBoards有一个很大的bug。在加载&#34; imagen&#34;:
之前尝试这个GC.Collect();
GC.WaitForPendingFinalizers();