如果用户成功登录,那么我想显示主窗口,如果没有,我想退出应用程序

时间:2011-04-18 21:13:58

标签: wpf

愚蠢的简单问题,我无法弄清楚。

我有一个WPF应用程序,我想先显示一个登录对话框(在主窗口显示之前)。

如果用户成功登录,那么我想显示主窗口,如果没有,我想退出应用程序。

如何正确地做到这一点?

3 个答案:

答案 0 :(得分:44)

我想我想出了我想要做的事情。

1)我需要将App.xaml中的“StartupUri”设置为“Logon.xaml”,其中Logon.xaml是我的登录窗口。

2)在LogonButton_Click事件处理程序中,我添加了以下内容

if (blnAuthenticateSuccessful) {
    MainWindow main = new MainWindow();
    App.Current.MainWindow = main;
    this.Close();
    main.Show();
}

这似乎可以实现我的目标。

答案 1 :(得分:4)

如果您想要一个新窗口出现以允许用户输入他们的登录信息,那么我在下面添加了一些代码。但是,在WPF中创建一个真正的模态对话框有点复杂,所以我在这里没有解释。 WPF中有关于模式对话框的信息:http://msdn.microsoft.com/en-us/library/aa969773.aspx

在MainWindow中,您可以打开登录窗口并隐藏主窗口:

// Code for MainWindow

// Create a new instance of the login window and then show it
LoginWindow loginWindow = new LoginWindow();
loginWindow.Show();

// Hide the MainWindow until later
this.Hide();

然后在登录页面上使用此功能,以便在用户登录后再次显示主窗口:

// Code for Login window

// This code finds the main window again and shows it
Application.Current.MainWindow.Show();

答案 2 :(得分:1)

我知道这是一个古老的问题,但是我遇到了类似的问题,我以不同的方式解决了这个问题,所以只想补充一点,以便将来有人可以从中受益。

要解决此问题,您可以将应用程序关闭模式更改为OnExplicitShutdown,然后在需要时调用Application.Shutdown(0)。例如:

public App()
{
    App.Current.ShutdownMode = ShutdownMode.OnExplicitShutdown;
}

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);

    // assume code below is for displaying dialog
    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);
}