gpt4 book ai didi

c# - 关闭一个窗口后关闭 WPF 中的所有窗口

转载 作者:太空宇宙 更新时间:2023-11-03 23:35:55 26 4
gpt4 key购买 nike

有什么方法可以在用户关闭其中一个窗口后关闭所有窗口,这是重要的部分:不使用 App.Current.Shutdown(),而是调用 单独关闭剩余的窗口?

我的想法是在 Window_Closing 事件处理程序方法中对每个剩余窗口调用 close。不过有一个问题。假设我有两个窗口类,AB。我创建了一个 AB 的实例 - ab 分别。如果我关闭窗口 A,它会调用 Window_closing 事件处理程序方法并在那里调用 b.close()。然后在B类中(AB都是窗口类,它们都继承自Window) Window_closing 方法被调用(因为我刚刚调用了 B.close()),并且 B::Window_closing 调用了 a.close() 并导致异常,因为我已经关闭了 a

解决这个问题的正确方法是什么?

最佳答案

如果您对拥有“主窗口”和“工具窗口”感兴趣,那么关闭主窗口会关闭所有窗口,而关闭工具窗口也会关闭,嗯,仅此而已 - 然后在 App. xaml 有一个友好的选项!

那是 Application.ShutdownMode

<Application
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

StartupUri="MainWindow.xaml"
ShutdownMode="OnMainWindowClose"
>
</Application>

请注意,这里所讨论的“MainWindow”是应用程序启动时使用的主窗口(或者您设置为主窗口,如果您在应用程序的生命周期中使用过它的话)。

编辑:事后思考:这当然会关闭所有窗口,但我实际上不确定它是否调用正常的“关闭”,或者只是关闭整个应用程序。对不起,你需要自己检查一下。如果你对我的观点感兴趣,那是你应该/可以轻松做到的方式,如果你真的-真的-需要通过“关闭()”关闭每个窗口的应用程序,那么我觉得你正在做某事这里错了,好像我没记错,“Window.Close()”可能被取消了。

EDIT2:是的,Window.Close() 可以取消。请see this article :

Closing a window causes the Closing event to be raised. If the Closing event isn't canceled, the following occurs: (...)

因此,遍历窗口集合并调用“关闭”并不能真正保证窗口会真正关闭并且应用程序可能仍会在之后继续运行。

关于c# - 关闭一个窗口后关闭 WPF 中的所有窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30616219/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com