如何在WPF中启动时打开两个窗口?

3

我感到自己似乎缺少了一些非常基本的东西,但是我似乎找不到答案。

当我的应用程序启动时,我希望在 MainWindow.xaml 之外打开一个基于现有 xaml 的第二个 window。我发现了很多关于使用代码后台创建新 window 的内容,但我想要打开在另一个 xaml 文件中预定义的 window

两者都使用 MahApps 并被定义为

<Controls:MetroWindow x:Class=...
  ...
</Controls:MetroWindow>

第二个窗口称为ControlWindow.xaml,位于根目录下与MainWindow.xaml同级。
谢谢
编辑:
当在app.xaml.cs的App_Startup事件中尝试创建和显示窗口时,即使该窗口从与MainWindow.xaml相同的类继承,也没有Show()方法可用。
MainWindow.xaml.cs
using MahApps.Metro.Controls;

namespace RollCallDisplayDemo
{
    public partial class MainWindow : MetroWindow
    {        
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}

ControlWindow.xaml.cs

using MahApps.Metro.Controls;

namespace RollCallDisplayDemo
{
    public partial class ControlWindow : MetroWindow
    {
        public ControlWindow()
        {
            InitializeComponent();
        }
    }
}

App.xaml.cs

using System.Windows;
using GalaSoft.MvvmLight.Threading;

namespace RollCallDisplayDemo
{
    public partial class App : Application
    {
        void App_Startup(object sender, StartupEventArgs e)
        {
            MainWindow NewWindowA = new MainWindow();
            ControlWindow NewWindowB = new ControlWindow();
        }

        static App()
        {
            DispatcherHelper.Initialize();
        }
    }
}

NewWindowA会按照您的期望创建并显示一个新实例。NewWindowB仅提供InitializeComponent方法,没有其他从MetroWindow类继承的内容。


2
你可以钩入应用程序启动事件,然后从App.Xaml.cs文件中进行任何你想要的操作。 - Steven Wood
没错,但是在订阅之后,我该如何启动一个已存在的 XAML 文件作为一个新的、独立的窗口呢?我只能找到如何在代码后台中定义一个新窗口的方法。不确定 downvote 是为了什么... - Ryan
1
在 XAML 中,您定义了窗口及其内容,但不会创建它。无论如何,您都必须使用new运算符创建一个新窗口。您的 MainWindow 也是通过new运算符创建的,只是您看不到-框架将其隐藏起来了。 - dymanoid
好的,我正在添加额外的信息,描述我所看到的行为。 - Ryan
1个回答

4
你需要调用NewWindowB.Show()使其可见。而且没有必要覆盖主窗口的创建方式,只需按照以下方式操作即可:
public partial class App : Application
{
    protected override void OnActivated(EventArgs e)
    {
        base.OnActivated(e);

        ControlWindow NewWindowB = new ControlWindow();
        NewWindowB.Show();
    }
}

谢谢Mark。事实证明,必须重新构建解决方案才能使Show()方法在NewWindowB上可用。我感谢您提供的可工作的代码示例。 - Ryan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接