【发布时间】:2023-03-13 23:01:01
【问题描述】:
我觉得我在这里遗漏了一些非常基本的东西,但我似乎找不到答案。
当我的应用程序启动时,除了MainWindow.xaml 之外,我还希望打开基于现有xaml 的第二个window。我发现了很多关于使用代码隐藏创建一个新的window,但我想打开一个在另一个xaml 文件中预定义的window。
两者都使用 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 类继承的方法。
【问题讨论】:
-
你可以挂钩到应用程序启动事件,然后从 App.Xaml.cs 文件中你可以做任何你想做的事情
-
对,但是在订阅它之后,如何将预先存在的 xaml 文件作为新的单独窗口启动?我能找到的只是如何创建一个在代码隐藏中定义的新窗口。不确定投反对票的目的是什么......
-
在 XAML 中,您定义一个窗口及其内容,但不要创建它。无论如何,您都必须使用
new运算符创建一个新窗口。您的MainWindow也由new运算符创建,您只是看不到它 - 框架对您隐藏了它。 -
好的,我正在为我所看到的行为添加其他信息。
标签: c# wpf mvvm-light mahapps.metro