【问题标题】:How do I get Silverlight animation/application to work as well/the same in WPF?如何让 Silverlight 动画/应用程序在 WPF 中正常工作/相同?
【发布时间】:2023-03-05 00:29:01
【问题描述】:

我发现 Silverlight 仪表板演示效果很好 @http://blog.allaboutprogress.com/2010/04/silverlight-dashboards-part-i/

但是,我想让应用程序在 WPF 中工作。我在 Silverlight 中创建了项目并让它运行,然后将文件复制到 WPF 应用程序中。

经过一个小的调整后,我让它工作了,基本上是相同的方式,但动画与 Silverlight 版本相比看起来很糟糕。

1) 在 Silverlight 中,无论表格有多大,一切都可以顺畅地移动。在 WPF 中,当有太多动画进行时,动画会变得不稳定,并且随着包含的窗口越大,效果也会越差。

2) 在 Silverlight 中,被拖动的 pod 和其他需要避开的 pod 都可以流畅地进行动画处理。在 wpf 中,当您拖动鼠标时,正在移动的 pod 不会移动,但是当您拖动鼠标时,其他 pod 仍然会避开。然后,当您松开鼠标时,吊舱会快速移动到您松开鼠标的位置。此外,其他 pod 的动画很快就会开始看起来很糟糕(就像图形驱动程序不堪重负一样)。

为什么 wpf 和 silverlight 之间的相同 xaml 和代码的行为如此根本不同,我怎样才能让 WPF 以与原始 Silverlight 代码相同的美丽方式制作动画?

为了让 WPF 版本正常工作,我必须进行以下更改。

所以我首先按照他们在 Silverlight 上的方式创建了所有内容,当我第一次启动它时它给了我一个错误:

{"'System.Windows.Media.Animation.DoubleAnimation' 不能使用默认的原始值 'NaN'。"}

所以,我通过更新解决了这个问题

void TranslateAnimation(UIElement element, double newLeft, double newTop, double ts)

方法,方法开头有以下代码:

void TranslateAnimation(UIElement element, double newLeft, double newTop, double ts)
  {
   if (double.IsNaN(Canvas.GetLeft(element)))
   {
    element.SetValue(Canvas.LeftProperty, Convert.ToDouble(0));
   }

   if (double.IsNaN(Canvas.GetTop(element)))
   {
    element.SetValue(Canvas.TopProperty, Convert.ToDouble(0));
   }
   ...

这使得代码可以启动/运行而不会崩溃。

此方法创建 Storyboard 和 Double 动画对象,将其与 pod 挂钩,然后告诉 storyboard 开始。它在一个循环中调用,对于当前未被鼠标拖动的每个移动 pod 调用一次。

【问题讨论】:

    标签: c# wpf animation silverlight-4.0


    【解决方案1】:

    这真是奇怪的行为,我猜它与以下之一有关:

    social.msdn: Usually smooth, lag occurring during WPF animation

    AllowTransparency problem

    如第一个链接所述,您可以尝试在 XAML 中使用 CompositionTarget.Rendering 而不是 Storyboard。看看这个例子:How to: Render on a Per Frame Interval Using CompositionTarget

    此外,Morten Nielsen 有一篇不错的博客文章解释了 Silverlight 和 WPF 之间的区别: sharpgis.net

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-30
      • 1970-01-01
      • 1970-01-01
      • 2016-01-13
      • 1970-01-01
      • 2022-01-28
      • 1970-01-01
      相关资源
      最近更新 更多