2015-12-04 85 views
1

我的WPF應用程序有一個小問題。關閉WPF窗口仍然可見任務欄

我有一個閃屏圖像(作爲XAML窗口)和主要的應用程序(如另一XAML窗口會從飛濺caleld)

即使當我用這個.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(); 
    } 
} 
+0

嘗試Environment.Exit(0); – Mainak

+0

檢查此問題http://stackoverflow.com/questions/9992119/wpf-app-doesnt-shut-down-when-closing-main-window –

+0

@Mainak沒有工作。同樣的東西 – DethoRhyne

回答

0

一個WPF應用程序的默認的關閉模式爲「OnLastWindowClose」,這隻要最後一個窗口被關閉時,一個應用關機程序將裝置被調用,所以你不需要明確寫入System.Windows.Application.Shutdown()。

你可能有一些東西引用了未關閉的啓動畫面。當你打開你的主窗口時,你應該在這個時候正確關閉啓動畫面,並確保對它的引用是空的。

如果您發佈了所有代碼,將會更容易知道正確的修復方法。

爲了防止在首位任務欄顯示一個窗口,設置你的窗口XAML聲明的ShowInTaskbar屬性:

<Window ShowInTaskbar="False" ... 
+0

添加代碼。嘗試ShowInTaskbar =「False」包圍了可見的啓動窗口的問題,但問題並未解決,因爲關閉主窗口仍會在任務欄和進程運行中留下空白應用程序。 – DethoRhyne

+0

你是如何打開飛濺的第一個地方?從哪個地方,並通過哪種方法? –

+0

它是app.xaml中定義的默認啓動頁面。 – DethoRhyne

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(); 
    }