我使用以下代码为我的窗口设置动画:
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);
}
}
首先,当您设置动画时,您应该始终删除该属性的潜在先前动画:
login.BeginAnimation(Window.LeftProperty, null);
login.BeginAnimation(Window.LeftProperty, da);
如果你不这样做,你将会遇到内存泄漏,并且可能会出现一些其他不良行为。
也由于依赖属性优先级 http://msdn.microsoft.com/en-us/library/ms743230.aspx您无法在具有活动动画的依赖属性上设置值,动画就是这种情况,因为它填充行为 http://msdn.microsoft.com/en-us/library/system.windows.media.animation.timeline.fillbehavior.aspx被设定为HoldEnd
(默认)。同样,您必须先删除动画。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)