首先打开新窗口

时间:2011-02-19 21:57:23

标签: wpf

如何做到这一点

首先出现登录窗口,如果每件事情都很好,只需关​​闭登录窗口并打开第二个主窗口。 在win表单中我们修改program.cs但在wpf中没有program.cs。

任何解决方案。?

Actully我在创建的窗口中完成了大部分工作默认情况下,现在想让它成为辅助(意味着它应该出现,然后在想要控制新窗口时关闭)

   <Application x:Class="DevnMark_V1._0.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             Startup="Application_Startup">

    <Application.Resources>

    </Application.Resources>
</Application>



 public partial class App : Application
    {
        private void Application_Startup(object sender, StartupEventArgs e)
        {
            var login = new MainWindow();
            login.ShowDialog();
            if (myAppSett.Default.validated == true)
            {
            var mainWindow = new 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();点发生时,当它被启动时会发生异常

3 个答案:

答案 0 :(得分:7)

我用这种方式解决了这个问题:

  1. 我从App.xaml中删除了StartupUri="MainWinodw.xaml",只留下Startup="Application_Startup"

  2. Application_Startup中,我立即引用了登录和主窗口:

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

    Login.ShowDialog();
    if (!Login.DialogResult.HasValue || !Login.DialogResult.Value)
    {
        Application.Current.Shutdown();
    }
    
    main.Show();
    
  4. ShutdownMode没有变化。

答案 1 :(得分:4)

可能没有program.cs,但默认的WPF程序模板中有一个App.xaml.cs,你可以在那里做同样的事情。

您要做的是从App.xaml中删除 StartupUri="LoginWindow.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();
}

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

答案 2 :(得分:0)

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