我需要同时动画一个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); 它将一步一步地做动画;在宽度变化完成后,高度会发生变化!:
发布于 2014-06-28 13:03:43
在查看了您的代码之后,我了解到您正试图模拟Window的宽度和高度。
但是我很遗憾地告诉您,因为窗口不是一个实际的wpf组件,而是一个平台组件。然而,窗口的内容是完全可控的,通过您的代码预期,但窗口不是。任何此类更改都是通过Pinvoke路由的。而你所面临的问题是一个已知的问题,而且周围的工作也有点复杂。
有一个解决方案是这样的,它使用pinvoke来动画窗口的高度和宽度。
Animating a WPF window width and height
下面是在microsoft创建的类似问题的一个bug,结果是(关闭的,不会修复)
额外
下面是一个示例,它并没有真正解决您的问题,但将帮助您减少您需要的行数,您需要为其他元素执行这样的动画。它是用较少的行重写代码。
DoubleAnimation anim = new DoubleAnimation
{
To = 0,
Duration = TimeSpan.FromSeconds(5)
};
border.BeginAnimation(Border.HeightProperty, anim);
border.BeginAnimation(Border.WidthProperty, anim);尝试使用除窗口之外的任何元素的代码,我使用了填充了颜色的边框。
很抱歉一见钟情地忽略了代码中的Window
https://stackoverflow.com/questions/24432669
复制相似问题