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上可用,必须重新构建解决方案。我很欣赏这个工作代码示例。