Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在WPF中启动时打开两个窗口?_C#_Wpf_Mvvm Light_Mahapps.metro - Fatal编程技术网

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

C# 如何在WPF中启动时打开两个窗口?,c#,wpf,mvvm-light,mahapps.metro,C#,Wpf,Mvvm Light,Mahapps.metro,我觉得我遗漏了一些非常基本的东西,但我似乎找不到答案 当我的应用程序启动时,我希望在现有xaml的基础上,除了MainWindow.xaml之外,再打开一个窗口。我发现了很多关于使用代码隐藏来创建新的窗口的方法,但是我想打开另一个xaml文件中预定义的窗口 两者都使用MAHAPP,并定义为 <Controls:MetroWindow x:Class=... ... </Controls:MetroWindow> ControlWindow.xaml.cs using Ma

我觉得我遗漏了一些非常基本的东西,但我似乎找不到答案

当我的应用程序启动时,我希望在现有
xaml
的基础上,除了
MainWindow.xaml
之外,再打开一个
窗口。我发现了很多关于使用代码隐藏来创建新的
窗口的方法,但是我想打开另一个
xaml
文件中预定义的
窗口

两者都使用MAHAPP,并定义为

<Controls:MetroWindow x:Class=...
  ...
</Controls:MetroWindow>
ControlWindow.xaml.cs

using MahApps.Metro.Controls;

namespace RollCallDisplayDemo
{
    public partial class MainWindow : MetroWindow
    {        
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}
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类继承的方法。

您需要调用NewWindowB.Show()使其可见。此外,无需重写主窗口的创建方式,只需执行以下操作:

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

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

您可以挂接到应用程序启动事件中,然后从App.Xaml.cs文件中执行任何您想执行的操作,但是在订阅该事件后,如何将先前存在的Xaml文件作为新的单独窗口启动?我所能找到的就是如何创建一个在代码隐藏中定义的新窗口。不确定下一票是为了什么……在XAML中,您定义了一个窗口及其内容,但不创建它。无论如何,您必须使用
new
操作符创建一个新窗口。您的
main窗口
也由
new
操作符创建,您只是看不到它-框架对您隐藏了它。好的,我正在添加有关我看到的行为的其他信息。谢谢Mark。事实证明,要使Show()方法在NewWindowB上可用,必须重新构建解决方案。我很欣赏这个工作代码示例。