在任务栏中仍然可以看到关闭WPF窗口

时间:2015-12-04 12:47:08

标签: c# wpf xaml

我的WPF应用程序存在一个小问题。

我有一个启动图像(作为XAML窗口)和主应用程序(作为另一个从Splash获取caleld的XAML窗口)

即使我在Splash窗口上使用此.Close()并在主应用上工作,Splash窗口仍然可以在任务栏中看到。

如果我在主应用程序上使用此.Close,我会在任务栏应用程序中有两个空白窗口,我必须按X才能完全关闭。

我也试过Application.Current.Shutdown(),但结果是一样的。

飞溅:

    public Splash()
    {
        InitializeComponent();
    }

    private void Window_ContentRendered(object sender, EventArgs e)
    {
        CloseProcedure(); 
    }

    public async void CloseProcedure()
    {
        //Missing data loading which will be async.            
        UC_Main UCMain = new UC_Main();
        MainWindow window = new MainWindow();
        window.AppContent.Children.Add(UCMain);
        this.Close();
        await Task.Delay(500); //for fade effect.
        window.Show();
    }

    private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
        Closing -= Window_Closing;
        e.Cancel = true;
        var anim = new DoubleAnimation(0, (Duration)TimeSpan.FromSeconds(0.5));
        this.BeginAnimation(UIElement.OpacityProperty, anim);
        anim.Completed += (s, _) => this.Close();
    }

主要应用程序

        private void BTN_Close_MouseUp(object sender, MouseButtonEventArgs e)
    {
        this.Close();
    }

    private void titleBar_MouseDown(object sender, MouseButtonEventArgs e)
    {
        titleBar.Background = Brushes.White;
    }

    private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
        Closing -= Window_Closing;
        e.Cancel = true;
        var anim = new DoubleAnimation(0, (Duration)TimeSpan.FromSeconds(0.2));
        this.BeginAnimation(UIElement.OpacityProperty, anim);
        anim.Completed += (s, _) => Application.Current.Shutdown();
    }
}

2 个答案:

答案 0 :(得分:0)

WPF应用程序的默认关闭模式是“OnLastWindowClose”,这意味着一旦关闭最后一个窗口,将调用应用程序关闭过程,因此您不需要显式写入System.Windows.Application.Shutdown( )。

您可能有一些引用未关闭的启动画面的内容。当您打开主窗口时,应该在那时正确关闭启动屏幕并确保对它的任何引用都为空。

如果您发布所有代码,则更容易了解正确的修复方法。

要防止首先在任务栏中显示窗口,请设置Window XAML声明的 ShowInTaskbar 属性:

<Window ShowInTaskbar="False" ...

答案 1 :(得分:0)

我已经为此提出了解决方案。 我没有尝试关闭进程并使关闭事件处理程序内的淡入淡出动画,而是编写了一个淡出屏幕的异步方法,等待相同的时间然后终止进程。像魅力一样。

    private void BTN_Close_MouseUp(object sender, MouseButtonEventArgs e)
    {
        this.FadeOut();
    }

    async private void FadeOut()
    {
        var anim = new DoubleAnimation(0, (Duration)TimeSpan.FromSeconds(0.2));
        this.BeginAnimation(UIElement.OpacityProperty, anim);
        await Task.Delay(200);
        this.Close(); 
        System.Diagnostics.Process.GetCurrentProcess().Kill();
    }