Невозможно установить свойство после его анимации в WPF - PullRequest
3 голосов
/ 17 сентября 2010

Я использовал этот код для анимации моего окна:

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 Ответ

5 голосов
/ 17 сентября 2010

Прежде всего, когда вы устанавливаете анимацию, вы всегда должны удалять потенциальную предыдущую анимацию этого свойства:

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

Если вы этого не сделаете, вы получите утечку памяти и, возможно, некоторые другиенежелательное поведение.

Также из-за приоритета DependencyProperty вы не можете установить значение для свойства DependecyProperty, у которого есть активная анимация, что имеет место в вашей анимации, потому что FillBehavior установите на HoldEnd (по умолчанию).Опять же, вам придется сначала удалить анимацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...