WPF:Measure/Arrange在动画期间仅调用一次
我正在使用一个自定义的网格状面板,其中一个元素可以缩放。 首先,所有元素的大小都相同。如果一个元素应该被缩放,它的大小将是以前的两倍,其余的元素将均匀地填充剩余的空间(因此,除具有缩放元素的同一行或同一列中的元素外,所有元素的高度和宽度都会变小,同一行中的元素的宽度和缩放高度都会变小,等等) 在我为缩放添加动画之前,一切都很顺利 我正在计算测量过程中每个元素的大小,首先我用计算出的大小测量每个元素。元素本身的大小为NaN,直到它们被缩放为止。我通过将它们设置为最终大小来缩放它们,然后开始从旧动画到新动画 但是,当我添加动画时,仅在第一个动画步骤中调用了“测量”和“排列”。 当我试着用availableSize或无限大的尺寸来测量元素时,动画效果很好,但是元素没有在尺寸变小的地方正确地调整大小 有人知道如何解决其中一种行为吗 问候 托拜厄斯 编辑:动画代码:WPF:Measure/Arrange在动画期间仅调用一次,wpf,layout,wpf-controls,measureoverride,arrangeoverride,Wpf,Layout,Wpf Controls,Measureoverride,Arrangeoverride,我正在使用一个自定义的网格状面板,其中一个元素可以缩放。 首先,所有元素的大小都相同。如果一个元素应该被缩放,它的大小将是以前的两倍,其余的元素将均匀地填充剩余的空间(因此,除具有缩放元素的同一行或同一列中的元素外,所有元素的高度和宽度都会变小,同一行中的元素的宽度和缩放高度都会变小,等等) 在我为缩放添加动画之前,一切都很顺利 我正在计算测量过程中每个元素的大小,首先我用计算出的大小测量每个元素。元素本身的大小为NaN,直到它们被缩放为止。我通过将它们设置为最终大小来缩放它们,然后开始从旧动画
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();
我猜您正在使用RenderTransformation,请尝试LayoutTransformation。放置添加动画的代码,这将对您有所帮助。我添加了上面使用的代码请参见上面的编辑。我尝试将ScaleTransform设置为Layouttransform,结果我的缩放元素希望全屏显示为大小(我猜,因为缩放前它们的大小为NaN),而不是实际大小的两倍