在WPF中交换MainWindows?

时间:2014-05-13 16:06:12

标签: c# wpf xaml

我有两个" MainWIndows"。登录屏幕和实际的内容主窗口。这是我想要发生的过程。

  1. 用户启动应用程序

  2. 点击登录窗口中的登录按钮

  3. 初始化内容窗口

  4. 等到我的所有列表和数据都被收集,解析并添加到ListViews

  5. 关闭登录窗口并显示主窗口。 (将MainWindow设为主窗口)

  6. 我遇到了实际隐藏主窗口的问题,但我仍然需要初始化它以便我可以收集所有数据。

    我将此添加到我的App.xaml:

    <Application.MainWindow>
        <NavigationWindow Source="MainWindow.xaml" Visibility="Hidden"></NavigationWindow>
    </Application.MainWindow>
    

    这是我的一些LoginWindow代码:

    // Login complete, load the MainWindow Data
    MainWindow mainWindow = new MainWindow();
    mainWindow.setLoginWindow = this;
    mainWindow.InitializeComponent();    //mainWindow.Show();
    

    我在MainWindow中使用的代码:

    公共部分类MainWindow:MetroWindow {

    Window LoginWindow;
    public Window setLoginWindow { get { return LoginWindow; } set { LoginWindow = value; } }
    
    public MainWindow()
    {
        InitializeComponent();
        // Hide the window to load Data, then on completion, close LoginWindow and show MainWindow:    ::: LoginWindow.Close();
        LoadData();
    }
    
    public void LoadData()
    {
        // Add player's to list ....
    
        // Done loading data, show the window
        LoginWindow.Close();
        this.Visibility = Visibility.Visible;
    }
    

    }

    问题

    我该如何正确地做到这一点?此外,我想将Focus保持在LoginWindow上,直到显示MainWIndow。

2 个答案:

答案 0 :(得分:2)

(在我的头顶,所以注意语法错误等...)

编辑App.xaml并执行此操作:

启动= “启动”

然后编辑App.xaml.cs并添加如下的StartUp事件:

private void StartUp(object sender, StartupEventArgs args)
{
...
}

然后在里面你可以调用你的登录窗口,然后在那之后启动你的主窗口。

    var login = new LoginWindow();
    if(login.ShowDialog()!=true)
    {
    //login failed go away
return
    }

    var mainWin = new MainWindow();
    mainWin.Show();

答案 1 :(得分:1)

我认为问题在于你将逻辑放在MainWindow中。尝试将其放在static Main()方法或class App: Application类中。

这是一个代码项目,他正在为启动画面做类似的事情: http://www.codeproject.com/Articles/38291/Implement-Splash-Screen-with-WPF

以下是使用App.xaml.cs的教程 http://www.wpf-tutorial.com/wpf-application/working-with-app-xaml/