只有当资源在窗口中时,DoubleAnimation才会抱怨origin == NaN



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

使用ActualWidth和ActualHeight。Nan表示这些属性尚未设置。https://stackoverflow.com/a/607849/3955716

这有点晚了,但万一有人遇到这种情况。DoubleAnimation是一个helper类,它允许双精度对象以平滑的方式从一个值转换到另一个值。由于没有为网格显式指定宽度,因此默认值为NaN。因此,DoubleAnimation试图从NaN移动到目标值。由于显而易见的原因,这是不可能的。如果你设置了网格的宽度,它应该可以正常工作。

一个解决方法是在构造函数中加载网格后设置网格宽度:
public Grid()
{
    InitializeComponent();
    this.Loaded += (s, _) => this.Width = this.ActualWidth;
}

相关内容

  • 没有找到相关文章

最新更新