我对WPF很新(并且对动画来说是全新的),所以我想这里有一些我在这里缺少的东西。我正在创建一个以特定方式放置控件的新布局Panel
;这里的细节不是(或不应该)特别重要。我想做的是为我调用Arrange
时我管理的元素的运动设置动画。
一般来说,我所做的是跟踪我曾经Rect
每个子元素的Arrange
。当ArrangeOverride
被调用时......
Rect
,我Arrange
到新的宽度和高度的那个边界矩形的X和Y,然后使用两个{{ 1}} s(一个用于X,一个用于Y)将其设置为新边界的X和Y DoubleAnimation
,我只需Rect
到新边界当我禁用动画时,一切都正确呈现(这是一件好事)。当我启用动画时,元素在不正确的位置呈现。如果我调整容器的大小,他们通常会将自己动画回正确的位置。
编辑以澄清
通常,错误似乎与控件边界的坐标直接相关。换句话说,如果控件距离右侧较远,则Arrange
似乎将其偏移 more 而不是右侧的控件。上/下也是如此。再次,调整大小似乎纠正了问题(事实上,控件将自己设置为正确的位置,令人沮丧地整洁),但前提是整个控件集在新大小中可见。
这是该类的缩写版本:
TranslateTransform
答案 0 :(得分:3)
您似乎正在将孩子安排到旧位置,然后应用渲染变换以使他们出现在新位置。这可能是一个问题,因为布局引擎可能会遇到问题,因为您为其提供了一个现在位于父布局容器之外的位置。你可能总是更好的运气安排到新的边界(在父元素内),然后应用渲染翻译动画将其移回原来的位置:
child.Arrange(newBounds);
int animationDuration = 300;
DoubleAnimation xAnim = new DoubleAnimation(lastBounds.X - newBounds.X, 0, TimeSpan.FromMilliseconds(animationDuration));
DoubleAnimation yAnim = new DoubleAnimation(lastBounds.Y - newBounds.Y, 0, TimeSpan.FromMilliseconds(animationDuration));