首先我想解释一下我要做什么:我正在开发一个学习应用程序来向学生展示一些卡片。我有 CardPack
类,它是一组卡片。
为了获得卡片包的许可,我想从用户那里获得一个 ID,然后我创建了一个窗口来从用户那里获得 RegisterKey。这是我的 GetRegisterKey("CardPackName")
方法:
public static string GetRegisterKey(string name)
{
GetRegisterKey grk = new GetRegisterKey(name);
grk.ShowDialog();
return grk.Key;
}
但在 grk.ShowDialog();
运行程序后将退出,我不知道为什么! 谁能帮我解决这个问题?!?
更新
我试图在 MainWindows
的 Windows_loaded
事件中创建一个 GetRegisterKey
的新实例,我调用了 grk.ShowDialog()
并且运行良好,程序没有关闭。我不知道问题的根源是什么!
但我发现问题不是来自 GetRegisterKey
然后我会从问题中删除它的代码。
更新2
我在 return grk.Key;
行中放置了一个断点来检查它是否运行但它没有运行并且程序关闭了!
最佳答案
请参阅 Application.ShutDownMode,
http://msdn.microsoft.com/en-us/library/system.windows.application.shutdownmode.aspx
只有在调用 Application 的 Shutdown 方法时,应用程序才会停止运行。关闭可以隐式或显式发生,由 ShutdownMode 属性的值指定。
如果将 ShutdownMode 设置为 OnLastWindowClose,Windows Presentation Foundation (WPF) 会在应用程序中的最后一个窗口关闭时隐式调用 Shutdown,即使任何当前实例化的窗口都设置为主窗口(请参阅 MainWindow)。
OnMainWindowClose 的 ShutdownMode 会导致 Windows Presentation Foundation (WPF) 在 MainWindow 关闭时隐式调用 Shutdown,即使其他窗口当前处于打开状态也是如此。
某些应用程序的生命周期可能不依赖于主窗口或最后一个窗口何时关闭,或者可能根本不依赖于窗口。对于这些情况,您需要将 ShutdownMode 属性设置为 OnExplicitShutdown,这需要显式 Shutdown 方法调用来停止应用程序。否则,应用程序将继续在后台运行。
ShutdownMode 可以通过 XAML 以声明方式配置,也可以通过代码以编程方式配置。
此属性仅在创建 Application 对象的线程中可用。
关于c# - 调用弹出窗口的 `.ShowDialog()` 时 WPF 应用程序关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12734066/