淡出一扇窗户
我目前正在开发一个wpf c#应用程序。 我已将事件触发器添加到窗体的xaml,以在窗口加载时淡入,并在窗口关闭时淡出。
褪色工作完美没有任何问题,但淡出效果不起作用。
我已经设置好了,所以窗口在加载时淡入,有一个持续时间为5秒,然后调用窗体淡出事件。
然而,窗口不淡出它只是直接关闭没有动画。 以下是淡入和淡出事件的代码
谢谢你尽你所能的帮助。
卸载不是一个合适的事件,我不知道这个事件是否甚至可以发生在Windows上。 您需要处理Closing
,阻止它实际关闭,启动动画并在动画的Completed
事件发生时关闭它。
例如
private void Window_Closing(object sender, CancelEventArgs e) { Closing -= Window_Closing; e.Cancel = true; var anim = new DoubleAnimation(0, (Duration)TimeSpan.FromSeconds(1)); anim.Completed += (s, _) => this.Close(); this.BeginAnimation(UIElement.OpacityProperty, anim); }
试试这个样本
namespace FadeInAndOutWindow { public partial class Window1 : Window { public Window1() { InitializeComponent(); } private bool closeCompleted = false; private void FormFadeOut_Completed(object sender, EventArgs e) { closeCompleted = true; this.Close(); } private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { if (!closeCompleted) { FormFadeOut.Begin(); e.Cancel = true; } } } }
HB解决方案很好,但不能有效地关闭窗口,因为Close()调用window_Closing和循环。 我的工作解决方案:
private void Window_Loaded(object sender, RoutedEventArgs e) { AlreadyFaded = false; } bool AlreadyFaded; private void window_Closing(object sender, CancelEventArgs e) { if (!AlreadyFaded) { AlreadyFaded = true; e.Cancel = true; var anim = new DoubleAnimation(0, (Duration)TimeSpan.FromSeconds(1)); anim.Completed += new EventHandler(anim_Completed); this.BeginAnimation(UIElement.OpacityProperty, anim); } } void anim_Completed(object sender, EventArgs e) { Close(); }