我正在尝试执行本文中所述的操作,显示一个登录窗口,当用户成功登录后,关闭它并打开应用程序的主窗口。
但是提供的答案(在发布此问题时)对我不起作用,因为我的显示窗口的代码正在App.cs中运行。
我知道原因,因为启动的第一个窗口自动设置为应用程序的MainWindow,并且当我在其上调用Close()时,它退出应用程序。因此,第二个窗口没有机会打开。
我的问题是如何克服这个问题?还是这不是我所描述的方式?
public partial class App : Application
{
public App(){}
private void Application_Startup(object sender, StartupEventArgs e)
{
LoginScreen f = new LoginScreen(); //becomes automatically set to application MainWindow
var result = f.ShowDialog(); //View contains a call to Close()
if (result == true) //at this point the LoginScreen is closed
{
MainWindow main = new MainWindow();
App.Current.MainWindow = main;
main.Show(); //no chance to show this, application exits
}
}
}
答案 0 :(得分:5)
您可以将应用程序关闭模式更改为OnExplicitShutdown
,然后在需要时调用Application.Shutdown(0)
。例如:
public App()
{
App.Current.ShutdownMode = ShutdownMode.OnExplicitShutdown;
}
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
if (MessageBox.Show("Continue?", "", MessageBoxButton.YesNo) == MessageBoxResult.No)
App.Current.Shutdown(0);
}
在构造函数中,我正在更改应用程序关闭模式,并在需要时调用关闭方法。
警告::当您更改ShutdownMode
时,请确保调用Shutdown
方法,否则即使关闭主窗口,您的应用程序也会在内存中。我已经在MainWindow中覆盖了OnClosed
方法来做到这一点:
protected override void OnClosed(EventArgs e)
{
base.OnClosed(e);
App.Current.Shutdown(0);
}
答案 1 :(得分:0)
App.xaml :(在此文件中,设置带有登录视图的开始窗口)
StartupUri="LoginWindow.xaml"
LoginWindow.xaml :(具有登录窗口视图的文件)
LoginWindow.xaml.cs :(视图的代码。在此放置分配给登录的功能。)
private void Login_Click(object sender, RoutedEventArgs e)
{
//Access control. If correct, go ahead. Here you must create a condition check
MainWindow main = new MainWindow();
main.Show();
this.Close();
}