单独关闭 WPF 窗口

5

目标:
使应用程序窗口能够独立关闭而不影响其他窗口。该应用程序是使用WPF创建的。

问题:

无法关闭窗口

在winform中,只需要使用代码 winform.close() 即可关闭窗口,但在WPF中不起作用。

您可以使用以下代码来关闭特定窗口:

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

但是如果您有多个窗口并且想关闭特定的窗口而不影响其他窗口,该怎么办呢?

3个回答

12

使用Application类通过Application.Windows属性获取窗口,就像您描述的那样。如果您在窗口的代码后面,请调用this.Close();

多窗口配置
将主窗口设置为Application.MainWindow属性,并根据需要将Application.ShutdownMode设置为适当的值,如果您还想保持应用程序打开,则主窗口关闭(例如,App.Current.ShutdownMode=ShutdownMode.OnExplicitShutdown;)。

我已经观察到,一些人对ShutdownMode存在问题。这个问题的解决方法是将第一个窗口设置为不可见,并从该窗口打开可见应用程序窗口。这可以防止应用程序在第一个创建的窗口关闭时关闭。但是,您也应该能够通过ShutdownMode属性解决此问题。
在有多个窗口的情况下,您可以使用Shutdown来关闭应用程序而不关闭每个窗口。

希望这个答案能解决您的问题。如果没有,请留下评论。


我已经注意到,一些人在ShutdownMode方面遇到了问题。解决此问题的方法是将第一个窗口设置为不可见,并从该窗口打开可见的应用程序窗口。 你关注的是"visibility"属性吗? - HelloWorld1
@FullmetalBoy:是的,您可以让应用程序打开第一个窗口,创建一些新的“窗口实例”,并将第一个窗口的可见性设置为隐藏。但正如我所写的,如果您正确设置了ShutdownMode(就我所记得的来说,在任何其他操作之前都必须在OnStartup中设置它),这不应该是必要的。以下帖子解释了一些关于WPF应用程序启动的内容。这对您可能会有兴趣:http://www.ageektrapped.com/blog/the-wpf-application-class-overview-and-gotcha/ - HCL

10

我同意HCL的观点。你可以在窗口的代码后台使用this.Close();,这将像winform.close();一样关闭WPF窗口。

或者你也可以使用以下代码获取特定窗口以关闭:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接