【问题标题】:DoubleAnimation complains of origin == NaN only when resource is in Window仅当资源在 Window 中时,DoubleAnimation 才抱怨 origin == NaN
【发布时间】:2017-02-19 04:33:13
【问题描述】:

我有一个大型 WPF 应用程序。我正在寻找使 UI 多线程。作为该过程的一部分,我将一些应用程序级别的控件和样式资源移至窗口级别。 (我从经验中知道,除非我在应用程序线程上,否则我不能在应用程序级别使用 DynamicResource 和解析。)无论如何,我移动了一堆控制资源。该应用程序工作时发现一个讨厌的问题:我在 FrameworkElement 高度和宽度上的所有动画都坏了。它们都失败了,因为控件的宽度或高度为 NaN。当控件模板在应用程序级别注册时,这些动画都可以工作。我为高度或宽度设置动画的所有控件都具有适当的默认高度或宽度值,而不是 NaN。为什么资源位置会影响这一点?

【问题讨论】:

  • 不幸的是,“大型 WPF 应用程序”信息不足以让我重现您的问题。我在我的桌面上的 VS 中有一个非常大的 WPF 应用程序,它显示的行为与您的不同。也许由于这是特定上下文中特定 XAML 的特定问题,您可以分享更多细节。
  • 我很想用这个问题发布一些代码,但我似乎无法在任何学术情况下重现该问题。
  • 在我试图隔离这一点时,我在这里发布了一个相关问题:stackoverflow.com/questions/39987144/…
  • 谢谢,我去看看

标签: c# wpf wpf-style doubleanimation


【解决方案1】:

使用实际宽度和实际高度。 Nan表示这些属性还没有设置。 https://stackoverflow.com/a/607849/3955716

【讨论】:

    【解决方案2】:

    这已经晚了,但以防其他人参与其中。 DoubleAnimation 是一个帮助类,它允许双精度值以平滑的方式从一个值转到另一个值。 由于您没有为网格明确指定宽度,因此默认值为 NaN。 因此,DoubleAnimation 试图从 NaN 变为无论目标值。由于显而易见的原因,这是无法做到的。 如果你设置了网格的宽度,它应该可以正常工作。

    一种解决方法是在构造函数中加载后设置网格宽度:

    public Grid()
    {
        InitializeComponent();
        this.Loaded += (s, _) => this.Width = this.ActualWidth;
    }
    

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-11
      • 1970-01-01
      • 1970-01-01
      • 2020-06-30
      • 2018-10-05
      • 1970-01-01
      • 2017-10-07
      • 2021-08-28
      相关资源
      最近更新 更多