2011-03-19 111 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();