愚蠢的简单问题,我无法弄清楚。
我有一个WPF应用程序,我想先显示一个登录对话框(在主窗口显示之前)。
如果用户成功登录,那么我想显示主窗口,如果没有,我想退出应用程序。
如何正确地做到这一点?
答案 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);
}