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

时间:2017-05-30 15:10:13

标签: c# wpf mvvm-light mahapps.metro

我觉得我在这里缺少一些非常基本的东西,但我似乎无法找到答案。

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

两者都在使用MahApps并被定义为

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

第二个window名为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类。

1 个答案:

答案 0 :(得分:2)

您需要调用NewWindowB.Show()才能使其可见。此外,没有必要覆盖主窗口的创建方式,只需执行以下操作:

public partial class App : Application
{
    protected override void OnActivated(EventArgs e)
    {
        base.OnActivated(e);

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