WPF:测量/排列在动画期间仅被调用一次

时间:2014-01-02 03:24:14

标签: wpf layout wpf-controls measureoverride arrangeoverride

我正在开发一个类似于网格的自定义面板,其中一个元素可以缩放。 首先,所有元素都具有相同的大小。如果应该缩放一个,它将获得前一个大小的两倍,其余元素将均匀地填充剩余空间(因此,除了同一行或列中的缩放元素之外的所有元素都会获得更小的高度和宽度,同一行获得较小的宽度和缩放的高度等。)。

在我为缩放添加动画之前,一切正常。

我正在计算测量过程中每个元素的大小,起初我用它的计算大小测量每个元素。元素本身具有NaN作为大小,直到它们被缩放。我通过将它们设置为最终大小来缩放它们,然后从旧到新的双重动画开始。

然而,当我添加动画时,测量和排列仅被调用为第一个动画步骤。 当我尝试使用av​​ailableSize或无限大小来测量元素时,动画工作正常,但元素在尺寸变小的情况下没有适当调整大小。

有谁知道如何解决其中一种行为?

此致 托拜厄斯

编辑:动画代码:

        Size normalSize = GetNormalElementSize(new Size(ActualWidth, ActualHeight));

        DoubleAnimation widthAnimation = new DoubleAnimation
        {
            From = normalSize.Width,
            To = normalSize.Width * 2,
            Duration = TimeSpan.FromMilliseconds(750),
            EasingFunction = new QuadraticEase { EasingMode = EasingMode.EaseInOut }
        };

        DoubleAnimation heightAnimation = new DoubleAnimation
        {
            From = normalSize.Height,
            To = normalSize.Height * 2,
            Duration = TimeSpan.FromMilliseconds(750),
            EasingFunction = new QuadraticEase { EasingMode = EasingMode.EaseInOut }
        };

        ZoomedElement.Height = normalSize.Height;
        ZoomedElement.Width = normalSize.Width;

        Storyboard.SetTargetProperty(widthAnimation, new PropertyPath(FrameworkElement.WidthProperty));
        Storyboard.SetTarget(widthAnimation, ZoomedElement);
        Storyboard.SetTargetProperty(heightAnimation, new PropertyPath(FrameworkElement.HeightProperty));
        Storyboard.SetTarget(heightAnimation, ZoomedElement);

        Storyboard zoomStoryboard = new Storyboard();
        zoomStoryboard.Children.Add(heightAnimation);
        zoomStoryboard.Children.Add(widthAnimation);
        zoomStoryboard.CurrentTimeInvalidated += zoomStoryboard_CurrentTimeInvalidated;
        zoomStoryboard.Begin();

1 个答案:

答案 0 :(得分:0)

我猜您正在使用RenderTransformation,请尝试使用LayoutTransformation。