Wpf 在第一次之后打开新窗口

Wpf 在第一次之后打开新窗口,wpf,Wpf,如何做到这一点 登录窗口首先出现,若一切正常,只需关闭登录窗口并打开第二个主窗口。 在win表单中,我们修改program.cs,但在wpf中没有program.cs 有什么解决办法吗 实际上,我在默认情况下创建的窗口中完成了大部分工作,现在希望将其设置为辅助窗口(意味着它应该出现,然后在需要控制新窗口时关闭) 公共部分类应用程序:应用程序 { 私有void应用程序\u启动(对象发送方、StartupEventArgs e) { var login=新的主窗口(); login.ShowDia

如何做到这一点

登录窗口首先出现,若一切正常,只需关闭登录窗口并打开第二个主窗口。 在win表单中,我们修改program.cs,但在wpf中没有program.cs

有什么解决办法吗

实际上,我在默认情况下创建的窗口中完成了大部分工作,现在希望将其设置为辅助窗口(意味着它应该出现,然后在需要控制新窗口时关闭)


公共部分类应用程序:应用程序
{
私有void应用程序\u启动(对象发送方、StartupEventArgs e)
{
var login=新的主窗口();
login.ShowDialog();
if(myAppSett.Default.validated==true)
{
var mainWindow=新的DevNMarkMainWindow();
mainWindow.ShowDialog();
}
}
登录窗口启动XML

<Window x:Class="DevnMark_V1._0.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
        xmlns:local="clr-namespace:Progress"
        Title="MainWindow" Height="292" Width="563" WindowStyle="None" BorderBrush="#FF0A6277" AllowsTransparency="True" WindowStartupLocation="CenterScreen" Topmost="True">


当我关闭登录窗口时会发生异常,并且在第二个窗口的
InitializeComponent();
点处会发生异常,当它将要初始化时查看它

可能没有program.cs,但默认WPF程序模板中有App.xaml.cs,您可以在那里执行相同的操作

您要做的是从App.xaml中删除App.xaml,然后修改App.xaml.cs的构造函数以调用登录窗口和主窗口,如下所示:

public App() : base() {
    bool authenticated = false;
    LoginWindow login;
    while (!authenticated)
    {
        login = new LoginWindow();
        login.ShowDialog();
        authenticated = ValidUser(login.username, login.password);
    }

    MainWindow main = new MainWindow(login.username);
    main.ShowDialog();
}

上面的示例假设您已将
用户名
密码
作为公共属性添加到LoginWindow,并且您已修改MainWindow的构造函数以获取参数。

我通过以下方式解决了此问题:

  • 我从App.xaml中删除了
    StartupUri=“MainWinodw.xaml”
    ,只留下
    Startup=“Application\u Startup”

  • 在应用程序启动中,我立即引用了登录和主窗口:

    loginwindow Login = new loginwindow();
    mainwindow Main = new mainwindow();
    
  • 我验证了我的登录,然后关闭登录窗口并用一个简单的
    .Show()
    打开主窗口:


  • ShutdownMode中没有任何更改

    建议的OnExplicitShutdown方法有效,您只需使用ShowDialog打开应用程序,然后单击此。Shutdown()即可避免在第二个窗口中显式关闭应用程序,都在App.xaml中,因此不会干扰应用程序的其余部分。

    现在附加了my App.xml。当一个关闭另一个打开时,我可以怎么做?我可以传递或做一些事情,告诉我用户已关闭它吗?简单或验证良好?就像我们应该在构造函数中传递变量一样?是的,有关示例,请参阅进一步编辑。您可以修改构造函数任何一个窗口的TOR都可以获取您喜欢的任何参数。当您在WPF窗口上调用.ShowDialog()时,它将一直阻止窗口关闭,而.Show()将打开窗口而不阻止调用代码。是的,它对我有帮助,但问题是,当我关闭登录表单应用程序关闭时,您是对的。如果您更改main.Show()应该可以工作改为main.ShowDialog()。如果将该代码放入构造函数(public App())中,而不是应用程序的启动,它是否有效?当我更改为ShutdownMode=“OnExplicitShutdown”时,它不起作用,但当我在关闭第二个窗口后处于此shutdowm模式时,应用程序没有关闭,就像线程处于活动状态并添加应用程序一样。Current.Shutdown();到第二个窗口它解决了,但我知道这是正确的方法
    loginwindow Login = new loginwindow();
    mainwindow Main = new mainwindow();
    
    Login.ShowDialog();
    if (!Login.DialogResult.HasValue || !Login.DialogResult.Value)
    {
        Application.Current.Shutdown();
    }
    
    main.Show();