1

我需要同时为一个 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);    

它会一步一步地做动画;宽度更改完成后高度将更改!:|

4

1 回答 1

2

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

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

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

动画 WPF 窗口的宽度和高度

这是在 microsoft 创建的类似问题的错误,结果是(已关闭,因为不会修复)

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很抱歉一见钟情就忽略了代码中的

于 2014-06-28T13:03:43.357 回答