首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使动画在WPF应用程序中的所有机器上都能正常工作?

如何使动画在WPF应用程序中的所有机器上都能正常工作?
EN

Stack Overflow用户
提问于 2020-02-16 12:55:38
回答 1查看 273关注 0票数 0

我有C# + WPF应用程序。我创建了将元素从一个点移动到另一个点的动画。我有一个热键,调用一个method>,方法启动动画动画在我的PC上完美(我有非常强大的PC),但如果另一个用户使用像样的PC,我的应用程序动画有一些滞后或冻结。看起来样本率很低

所以,问题是动画在其他电脑上效果不好。

我注意到,如果我运行我的应用程序和任务管理器,我会看到GPU负载正在消耗,当我使用动画开始运行一个方法时,GPU负载正在增加,每次使用动画方法单击热键时,GPU负载都会增加到15%。

目前的结果:动画制作不好,有些滞后。

预期效果:动画制作精良流畅。

如何使动画在所有机器上正常工作?

我的电脑:

其他个人电脑

代码语言:javascript
代码运行次数:0
运行
复制
 public class HotKeys
{

DoubleAnimation animShowCard = new DoubleAnimation(100, TimeSpan.FromMilliseconds(250));
DoubleAnimation animShowCardOffset = new DoubleAnimation(0, TimeSpan.FromMilliseconds(150));


 public HotKeys(MainWindow _window)
    {
        SineEase sineEase = new SineEase();
        sineEase.EasingMode = EasingMode.EaseOut;
        animShowCard.EasingFunction = sineEase;
        animShowCardOffset.EasingFunction = sineEase;

         animShowCard.Completed += (s, e) =>
        {
          window.cardQuestionBorder.RenderTransform = new TranslateTransform(100, 0);
          window.cardQuestionBorder.RenderTransform.BeginAnimation(TranslateTransform.XProperty, animShowCardOffset);            

        };
    }

     //call a method with animation when D1 hotkey is clicked
         if (e.Key == Key.D1)
         {
            e.Handled = true;  
              ShowCard();
          }

     //method that show animation
      private void ShowCard()
    {
        window.cardQuestionBorder.RenderTransform = new TranslateTransform(-1600, 0);
        window.cardQuestionBorder.RenderTransform.BeginAnimation(TranslateTransform.XProperty, animShowCard);
    }
}

我试图将动画的SampleRate (我认为60帧是默认值)更改为25或更少,但即使在我的PC上,它也会变得更糟:

代码语言:javascript
代码运行次数:0
运行
复制
Timeline.SetDesiredFrameRate(animShowCard, 25);

编辑:

我记录了我的应用程序在其他PC上工作,它消耗了高达45%的GPU负载。

用户PC视频

编辑2:

我找到了根本问题。这是一张卡片的影子效应。我在xaml上用过。当我移除这个东西的时候,动画一直运行得很流畅和很好。

代码语言:javascript
代码运行次数:0
运行
复制
<Border.Effect>
                    <DropShadowEffect Color="Black"
                                      Direction="320"
                                      BlurRadius="60"
                                      ShadowDepth="40"
                                      Opacity="0.8" />
                </Border.Effect>

有什么办法修复它吗?我可以使用另一种阴影类型吗?我如何在后面的代码中使用它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-01 06:04:53

问题是我在边界上使用了阴影效应。边框包含许多元素,如矩形和文本。效果适用于边框中的所有元素。这就是为什么它反映了GPU的使用。我只是在内部元素上应用了阴影效果,而不是边框,现在动画作品还不错。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60248653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档