2011-03-19 112 views
4

目標:
啓用應用程序的窗口(一個或多個)關閉的獨立,而不會影響其他人。該應用程序是在WPF中創建的。關閉WPF窗口分別

問題:

無法關閉窗口(S)

在winform,就足以讓代碼winform.close()關閉該窗口,但它不工作的WPF。

你可以有這樣的代碼來關閉specfic窗口:

Application.Current.Windows[0].Close(); 

,但它會如何,如果你有許多窗口和要關閉特定的窗口,而不影響其他工作嗎?

回答

11

使用Application類通過Application.Windows - 屬性完全按照自己的描述得到的窗口。如果你在窗口的代碼隱藏,來電this.Close();

配置了多個Windows
設置主窗口的Application.MainWindow屬性和設置Application.ShutdownMode到一個合適的值,如果你也想保持應用程序打開,如果主窗口關閉(例如App.Current.ShutdownMode=ShutdownMode.OnExplicitShutdown;)。

我已經觀察到,有些人不得不與ShutdownMode問題。解決方法是打開不可見的第一個窗口,並從此窗口打開可見的應用程序窗口。這可以防止應用程序在第一個創建的窗口關閉時關閉。但是,您應該能夠通過ShutdownMode屬性解決此問題。
在具有多個窗口的場景中,您可以使用Shutdown關閉應用程序而不關閉每個窗口。

我希望這個答案是你的問題是什麼。如果不是,請發表評論。

+0

「我已經觀察到,有些人曾與ShutdownMode問題。針對此解決方法是打開的第一個窗口不可見,從這個窗口,打開可見的應用程序窗口。「 難道財產‘可見性’,你的重點? – 2011-03-20 08:23:29

+0

@FullmetalBoy:是的,您可以讓應用程序打開第一個窗口,創建一些新的Window實例並將第一個窗口的可見性設置爲隱藏。但正如我寫的,這應該不是必要的,如果你相應地設置ShutdownMode(據我所知,你必須在任何其他行動發生之前做OnStartup)。以下文章解釋了有關WPF應用程序啓動的一些事情。這可能對你有趣:http://www.ageektrapped.com/blog/the-wpf-application-class-overview-and-gotcha/ – HCL 2011-03-20 13:45:29

10

我同意HCL。您可以從窗口的代碼隱藏中使用this.Close();,這將關閉WPF窗口,如winform.close();

或者你可以用下面的代碼獲得接近

Window win = Application.Current.Windows.OfType<Window>().SingleOrDefault(w => w.Name == "Window Name"); 
win.Close(); 
0

的特定窗口只需使用此代碼關閉最近的窗口

Application.Current.Windows[Application.Current.Windows.Count - 1].Close();