Я работаю над настраиваемой сеткой, подобной панели, где можно увеличить один элемент. Во-первых, все элементы имеют одинаковый размер. Если нужно увеличить масштаб, он получает в два раза больше предыдущего размера, а остальные элементы равномерно заполняют оставшееся пространство (поэтому все элементы, кроме тех, которые находятся в одной строке или столбце с увеличенным элементом, получают меньшую высоту и ширину, одна и та же строка получает меньшую ширину и увеличенную высоту и т. д.).WPF: Measure/Arrange вызывается только один раз во время анимации
Все работало нормально, пока я не добавил анимацию для увеличения.
Я вычисляю размер каждого элемента в проходе меры, и сначала я измерял каждый элемент с его рассчитанным размером. Сами элементы имеют размер NaN до тех пор, пока они не будут увеличены. Я масштабирую их, установив их в их окончательный размер, а затем начинаю двойные преобразования от старого к новому.
Однако, когда я добавил анимацию, измерение и аранжировка вызывались только для первого этапа анимации. И когда я пытался измерить элементы с доступным размером или бесконечным размером, анимация работала нормально, но элементы не соответствовали размеру размеров, где они уменьшились.
Кто-нибудь знает, как решить одно из этих поведений?
С уважением Tobias
Edit: Код для анимации:
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();
введите код этой добавленной анимации, было бы полезно помочь вам. – Sankarann
Я добавил код, который я использую выше – Tobi