我需要同时为一个 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
这是在微软创建的类似问题的错误,结果是(已关闭,因为不会修复)
额外
下面是一个示例,它实际上并不能解决您的问题,但可以帮助您减少为其他元素执行此类动画所需的行数。这是用更少的行重写您的代码
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/