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

标签 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);    

它会一步步做动画;宽度改变完成后高度也会改变! :|

最佳答案

查看您的代码后,我了解到您正在尝试同时对 Window 的宽度和高度进行动画处理

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

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

Animating a WPF window width and height

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

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

关于WPF动画(同时更改单个元素的多个属性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24432669/

相关文章:

c# - 文件拖放事件处理程序中的 MessageBox 导致 Windows 资源管理器卡住

swift - 只有在 "Has no segue with identifier"上调用 performSegue 时才会出现 `tableView (_: didSelectRowAt:)` 错误

c# - 如何在 XAML 中创建 "Window"菜单?

ios - UITableViewCell 中的 ImageView 不会显示

ios - 如何正确显示标签栏项目的图标

wpf - 如何使用动画笔划粗细动态调整矩形路径的大小?

c# - 仅在鼠标离开时自动反转为原始颜色

WPF - 在 xaml 中完成另一个动画后开始动画

c# - WPF:放大 Scicart 图表上的前 3 个点

c# - 异步方法中未显示忙碌指示符