gpt4 book ai didi

c# - WPF 动画性能随时间下降

转载 作者:太空宇宙 更新时间:2023-11-03 20:30:38 24 4
gpt4 key购买 nike

我有两个动画:

    <Storyboard x:Key="ChangeLayout">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Canvas.Left)" Storyboard.TargetName="currentContent">
<EasingDoubleKeyFrame KeyTime="0:0:0.0" Value="900"/>
<EasingDoubleKeyFrame KeyTime="0:0:0.2" Value="0">
<EasingDoubleKeyFrame.EasingFunction>
<CircleEase EasingMode="EaseInOut"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
<Storyboard x:Key="HideLayout">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Canvas.Left)" Storyboard.TargetName="currentContent">
<EasingDoubleKeyFrame KeyTime="0:0:0.2" Value="-900">
<EasingDoubleKeyFrame.EasingFunction>
<CircleEase EasingMode="EaseInOut"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
</DoubleAnimationUsingKeyFrames>
</Storyboard>

以及开始它们的代码:

private void btnUser_Click(object sender, RoutedEventArgs e)
{
if (currentContent.Content != null)
if (currentContent.Content.GetType() == typeof(Layouts.User))
return;
((hl.Children[0] as DoubleAnimationUsingKeyFrames).KeyFrames[0] as EasingDoubleKeyFrame).Value = -this.ActualWidth;
hl.Completed += (_sender, _e) =>
{
currentContent.Content = new Layouts.User();
cl.Completed += (ssender, ee) =>
{
btnMusic.Opacity = 0.5;
btnUser.Opacity = 0.9;
};
cl.Begin();
};
hl.Begin();
}
private void btnMusic_Click(object sender, RoutedEventArgs e)
{
if (currentContent.Content != null)
if (currentContent.Content.GetType() == typeof(Layouts.Music))
return;
((hl.Children[0] as DoubleAnimationUsingKeyFrames).KeyFrames[0] as EasingDoubleKeyFrame).Value = -this.ActualWidth;
hl.Completed += (_sender, _e) =>
{
if (Layouts.Music.CurrentMusic == null)
{
Layouts.Music.CurrentMusic = new Layouts.Music();
Layouts.Music.CurrentMusic.GetMusic();
}
currentContent.Content = Layouts.Music.CurrentMusic;
cl.Completed += (ssender, ee) =>
{
btnUser.Opacity = 0.5;
btnMusic.Opacity = 0.8;
};

cl.Begin();
};
hl.Begin();
}

在用户和音乐内容之间切换几次后,ChangeLayout 动画开始非常缓慢且滞后,根据 WPF Performance Suite FPS 动画,切换后动画从 500 + 下降到最大值 4eh ...找不到任何解决方案 =(

对不起我的英语,我正在学习。

最佳答案

您是在每次单击按钮时添加事件处理程序,而不是删除它们。

hl.Completed += (_sender, _e) =>
{
};

在两个按钮处理程序中。这既会占用资源,又意味着每次单击按钮都会多次调用代码。

解决方案是将设置的处理程序移动到按钮点击的外部,或者在完成后删除处理程序。在后一种情况下,您必须将事件处理程序代码移动到一个单独的方法中,这样您就可以这样做:

hl.Completed += MyEventHandler;

然后:

private void MyEventHandler(object sender, EventArgs e)
{
// Do stuff

hl.Completed -= MyEventHandler;
}

虽然这意味着 hl 必须对两种方法都可见。

关于c# - WPF 动画性能随时间下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7745560/

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