无法在WPF中设置动画后设置属性

时间:2010-09-17 08:29:41

标签: wpf animation

我用这段代码动画我的窗口:

winLogin login = new winLogin();
login.Owner = this;
login.Show();

DoubleAnimation da = new DoubleAnimation();
da.From = 0;
da.To = this.Left + ((this.Width - login.Width) / 2);
da.AutoReverse = false;
da.Duration = new Duration(TimeSpan.FromSeconds(0.1));
login.BeginAnimation(Window.LeftProperty, da);

问题在于,无论何时我设置此窗口的Left属性(在动画之后),它都会变得疯狂。

我使用此代码将子窗口始终放在中心位置,但我使用动画的窗口的Left属性无法正确更改。

private void Window_LocationChanged(object sender, EventArgs e)
{
        foreach (Window win in this.OwnedWindows)
        {
            win.Top = this.Top + ((this.Height - win.Height) / 2);
            win.Left = this.Left + ((this.Width - win.Width) / 2); 
        }
}

1 个答案:

答案 0 :(得分:5)

首先,当您设置动画时,您应该始终删除该属性的潜在先前动画:

login.BeginAnimation(Window.LeftProperty, null);
login.BeginAnimation(Window.LeftProperty, da);

如果你不这样做,你会得到内存泄漏,可能还有其他一些不良行为。

同样由于DependencyProperty precedence您无法在具有活动动画的DependecyProperty上设置值,因此动画就是这种情况,因为其FillBehavior设置为HoldEnd(默认)。你必须首先删除动画。