WPF动画(同时更改单个元素的多个属性)

时间:2014-06-26 14:03:55

标签: wpf storyboard wpf-animation doubleanimation

我需要同时为一个ui元素的多个属性设置动画。

例如,同步减小窗口的宽度和高度。

有什么想法吗?

        DoubleAnimation widthAnimation = new DoubleAnimation
        {           
            To = 0,
            Duration = TimeSpan.FromSeconds(5)
        };

        DoubleAnimation heightAnimation = new DoubleAnimation
        {
            To = 0,
            Duration = TimeSpan.FromSeconds(5)
        };

        Storyboard.SetTargetProperty(widthAnimation, new PropertyPath(Window.WidthProperty));
        Storyboard.SetTarget(widthAnimation, this);

        Storyboard.SetTargetProperty(heightAnimation, new PropertyPath(Window.HeightProperty));
        Storyboard.SetTarget(heightAnimation, this);

        Storyboard s = new Storyboard();
        s.Completed += FadeOut_Completed;
        s.Children.Add(widthAnimation);
        s.Children.Add(heightAnimation);
        this.BeginStoryboard(s, HandoffBehavior.SnapshotAndReplace, true);    

它会一步一步做动画;宽度变化完成后,高度会发生变化! :|

1 个答案:

答案 0 :(得分:1)

在查看您的代码后,我了解到您正在尝试设置Window simultenousely的宽度和高度的动画

但我很遗憾地告诉你,因为window不是一个真正的wpf组件,而是一个平台组件。但是窗口的内容可以通过代码完全按照预期控制,但窗口不是。任何此类更改都通过Pinvoke发送。你面临的问题是一个已知问题,而且解决方法有点复杂

这里有一个解决方案,它使用pinvoke为窗口的高度和宽度设置动画

Animating a WPF window width and height

这是在microsoft创建的类似问题的错误,结果是(关闭,因为赢了' t修复)

https://connect.microsoft.com/VisualStudio/feedback/details/715415/window-width-height-animation-in-wpf-got-broken-on-net-framework-4-0

<强>附加

下面是一个实际上没有解决您的问题的示例,但会帮助您减少为其他元素执行此类动画所需的行数。它是用较少的行重写代码

        DoubleAnimation anim = new DoubleAnimation
        {
            To = 0,
            Duration = TimeSpan.FromSeconds(5)
        };

        border.BeginAnimation(Border.HeightProperty, anim);
        border.BeginAnimation(Border.WidthProperty, anim);

尝试使用除窗口之外的任何元素的代码,我使用了带有一些颜色填充的边框

虔诚地忽略了代码中的Window