我需要同时为一个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);
它会一步一步做动画;宽度变化完成后,高度会发生变化! :|
答案 0 :(得分:1)
在查看您的代码后,我了解到您正在尝试设置Window
simultenousely的宽度和高度的动画
但我很遗憾地告诉你,因为window不是一个真正的wpf组件,而是一个平台组件。但是窗口的内容可以通过代码完全按照预期控制,但窗口不是。任何此类更改都通过Pinvoke发送。你面临的问题是一个已知问题,而且解决方法有点复杂
这里有一个解决方案,它使用pinvoke为窗口的高度和宽度设置动画
Animating a WPF window width and height
这是在microsoft创建的类似问题的错误,结果是(关闭,因为赢了' t修复)
<强>附加强>
下面是一个实际上没有解决您的问题的示例,但会帮助您减少为其他元素执行此类动画所需的行数。它是用较少的行重写代码
DoubleAnimation anim = new DoubleAnimation
{
To = 0,
Duration = TimeSpan.FromSeconds(5)
};
border.BeginAnimation(Border.HeightProperty, anim);
border.BeginAnimation(Border.WidthProperty, anim);
尝试使用除窗口之外的任何元素的代码,我使用了带有一些颜色填充的边框
虔诚地忽略了代码中的Window