淡出一扇窗户

我目前正在开发一个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(); }