【问题标题】:Swapping MainWindows in WPF?在 WPF 中交换 MainWindows?
【发布时间】:2023-03-05 07:45:01
【问题描述】:

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

  1. 用户启动应用程序

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

  3. 初始化内容窗口

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

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

我在隐藏主窗口时遇到问题,但我仍然需要能够对其进行初始化,以便收集所有数据。

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

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

这是我的一些登录窗口代码:

// 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;
}

}

问题

我将如何正确地做到这一点?另外,我希望将焦点保持在 LoginWindow 上,直到 MainWINdow 显示出来。

【问题讨论】:

  • 你为什么不去启动画面 ??
  • @KrishnrajRana 这不是启动画面。这是一个登录屏幕。一个全新的窗口。
  • 您在关闭窗口时遇到了哪些“问题”?只是一个设计建议。如果您必须“初始化”隐藏窗口以收集数据,则您的设计可能存在问题。考虑对 MVVM 进行一些研究,并将数据模型与视图逻辑分开。
  • @NathanA 我该怎么做呢?
  • @EliteGamer 描述 MVVM 的概念超出了这里的范围。只需 google 一下它,因为它与 WPF 相关,并在学习这个概念时获得一些乐趣。随着时间的推移,它可能会非常有益。

标签: c# wpf xaml


【解决方案1】:

(在我的脑海中,所以注意语法错误等......)

编辑 App.xaml 并执行以下操作:

Startup="启动"

然后编辑 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();

【讨论】:

  • 您能进一步解释一下您的意思吗?另外,我会在启动 URI 中放什么?什么都没有?
  • 是的,启动 URI 将被删除。这将启动该方法,而不是为您启动一个窗口。一个问题是,根据您的实现,您可能还需要更改 App.xaml 中的关闭行为并自行控制。
【解决方案2】:

我认为问题在于您将逻辑放在主窗口中。尝试将其放入 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/

【讨论】:

  • 逻辑需要在主窗口中。它处理来自我们 API 的所有数据。我只是不希望用户看到一个空白,然后突然数据出现在他们的脸上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-21
  • 2010-12-21
  • 1970-01-01
相关资源
最近更新 更多