You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

WPF中实现窗口切换并激活新窗口的问题咨询

嘿,作为刚上手WPF的新手,遇到窗口跳转的坑太正常啦!我猜你遇到的问题大概率是点击登录后,新窗口刚弹出来整个程序就直接退出了?这是WPF默认的窗口生命周期管理导致的,我给你几个靠谱的解决方案:

方案一:用模态登录窗口(最推荐)

这种方式更符合常规的登录流程,登录窗口是模态的,只有登录成功才会进入主程序,逻辑更清晰:

  1. 先修改App.xaml,删掉StartupUri属性(或者保留但后续在代码里覆盖),然后在App.xaml.cs里重写OnStartup方法:
protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);

    // 打开登录窗口作为模态窗口
    var loginWindow = new LoginWindow();
    if (loginWindow.ShowDialog() == true)
    {
        // 登录成功,打开主窗口
        var mainWindow = new StudentInfoSystem.MainWindow();
        mainWindow.Show();
    }
    else
    {
        // 用户取消登录,直接退出程序
        Application.Current.Shutdown();
    }
}
  1. 然后在你的登录窗口按钮点击事件里,验证通过后设置DialogResult并关闭:
private void LoginBtn_Click(object sender, RoutedEventArgs e)
{
    // 这里替换成你的用户名密码验证逻辑
    bool loginSuccess = CheckCredentials(UsernameTxt.Text, PasswordPwd.Password);

    if (loginSuccess)
    {
        this.DialogResult = true;
        this.Close();
    }
    else
    {
        MessageBox.Show("用户名或密码错误,请重试!");
    }
}

方案二:修改应用程序的关闭模式

如果坚持用Show()打开主窗口,那需要调整WPF的ShutdownMode,避免关闭登录窗口时直接终止整个程序:

  1. App.xaml里修改ShutdownModeOnExplicitShutdown
<Application x:Class="StudentInfoSystem.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="LoginWindow.xaml"
             ShutdownMode="OnExplicitShutdown">
    <!-- 其他内容 -->
</Application>
  1. 然后在登录按钮的点击事件里,打开主窗口后绑定它的Closed事件,确保主窗口关闭时程序才退出:
private void LoginBtn_Click(object sender, RoutedEventArgs e)
{
    if (CheckCredentials(UsernameTxt.Text, PasswordPwd.Password))
    {
        var mainWindow = new StudentInfoSystem.MainWindow();
        mainWindow.Show();
        // 主窗口关闭时触发程序退出
        mainWindow.Closed += (s, args) => Application.Current.Shutdown();
        this.Close();
    }
    else
    {
        MessageBox.Show("登录失败!");
    }
}

另外提醒你一下,一定要记得先做用户名和密码的验证逻辑,不要直接跳转哦!

内容的提问来源于stack exchange,提问作者Subnom

火山引擎 最新活动