如何对元素进行动画处理,其中触发器是要动画化的属性上的数据更改

时间:2019-06-05 11:34:29

标签: c# wpf animation resize

我想为WPF窗口设置动画。它设置为内容的大小,因此当内容更改时,窗口也会更改大小。不过,我不希望它捕捉到新的大小,当它确定需要新的大小时,我希望它可以通过动画在新旧值之间切换。

我该如何设置?

编辑: 我正在使用SizeToContent = WidthAndHeight“作为我的窗口的参数,并希望在它自动调整大小以显示不同内容时进行动画处理。

1 个答案:

答案 0 :(得分:4)

您可以覆盖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);
    }
}