如何从元素中心调整大小?

时间:2011-02-22 10:58:50

标签: wpf animation

我希望显示带有动画的新窗口,将大小从0扩大到300.在Loaded事件中,我输入了以下代码:

DoubleAnimation heightAnim = new DoubleAnimation(0,300,TimeSpan.FromSeconds(1));
BeginAnimation(HeightProperty,heightAnim);

DoubleAnimation WidthAnim = new DoubleAnimation(0,300,TimeSpan.FromSeconds(1));
BeginAnimation(WidthProperty,WidthAnim);

此代码工作正常。但是施工从窗户的左上角开始,并向右和向下扩展,直到它达到300 * 300的尺寸。 我希望它从中心开始,从那里扩展到所有4个方面。 我该怎么办?

P.S。在尝试Jogy回答后,我意识到获得此效果的更好方法是在ScaleX和ScaleY上应用动画,而不是在窗口大小上应用动画。因为当窗口大小上的动画时,用户将只看到部分内容,直到它达到完整大小。 你觉得......怎么样 ?什么是更好的方法?

提前致谢!

2 个答案:

答案 0 :(得分:2)

为了达到这个效果,我意识到最好使用ScaleTransform。在Loaded事件中,代码应如下所示:

ScaleTransform scaleTransform = new ScaleTransform();

'grid'是Window下的元素,HorizontalElignmentVerticalElignment设置为'Center'

grid.LayoutTransform = scaleTransform;

DoubleAnimation heightAnim = new DoubleAnimation(0,1,TimeSpan.FromSeconds(1));
scaleTransform.BeginAnimation(ScaleTransform.ScaleYProperty,heightAnim);

DoubleAnimation WidthAnim = new DoubleAnimation(0,1,TimeSpan.FromSeconds(1));
scaleTransform.BeginAnimation((ScaleTransform.ScaleXProperty,WidthAnim);

答案 1 :(得分:1)

为Top和Left属性添加另外两个动画,如下所示:

  DoubleAnimation topAnim = new DoubleAnimation(this.Top, this.Top - 150, TimeSpan.FromSeconds(1));
  BeginAnimation(TopProperty, topAnim);

  DoubleAnimation leftAnim = new DoubleAnimation(this.Left, this.Left - 150, TimeSpan.FromSeconds(1));
  BeginAnimation(LeftProperty, leftAnim);

您可能还希望通过将动画置于故事板中来同步动画。