Как анимировать элемент, в котором триггер представляет собой изменение данных свойства, которое вы хотите анимировать - PullRequest
5 голосов
/ 05 июня 2019

Я хочу анимировать свое окно WPF. Он настроен на размер содержимого, поэтому при изменении содержимого окно меняет размер. Я не хочу, чтобы он привязывался к новому размеру, хотя, когда он определяет, что ему нужен новый размер, я хочу, чтобы он перемещался между старым и новым значением с анимацией.

Как мне это настроить?

EDIT: Я использую SizeToContent = WidthAndHeight "в качестве параметра для моего окна и хочу анимировать, когда оно автоматически масштабируется для отображения другого содержимого.

1 Ответ

4 голосов
/ 05 июня 2019

Вы можете переопределить метод OnPropertyChanged и запустить анимацию любого свойства, которое вам нравится.

Например, свойство Width:

private DoubleAnimation widthAnimation;

protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
{
    if (e.Property == WidthProperty &&
        !double.IsNaN((double)e.OldValue) &&
        widthAnimation == null)
    {
        widthAnimation = new DoubleAnimation
        {
            Duration = TimeSpan.FromSeconds(1),
            From = (double)e.OldValue,
            To = (double)e.NewValue
        };

        widthAnimation.Completed += (s, a) =>
        {
            widthAnimation = null;
            BeginAnimation(WidthProperty, null);
        };

        BeginAnimation(WidthProperty, widthAnimation);
    }
    else
    {
        base.OnPropertyChanged(e);
    }
}
...