【发布时间】:2015-12-19 21:55:58
【问题描述】:
我正在尝试为我的 WPF 应用程序编写自定义 Main() 函数,以便我可以解析命令行并基于命令行配置 GUI。我不知道如何获得对Main() 的默认实现创建的MainWindow 实例的引用。在App.g.cs 中找到的自动生成的实现如下:
public void InitializeComponent() {
if (_contentLoaded) {
return;
}
_contentLoaded = true;
#line 5 "..\..\..\App.xaml"
this.StartupUri = new System.Uri("MainWindow.xaml", System.UriKind.Relative);
#line default
#line hidden
System.Uri resourceLocater = new System.Uri("/MyApplication;component/app.xaml", System.UriKind.Relative);
#line 1 "..\..\..\App.xaml"
System.Windows.Application.LoadComponent(this, resourceLocater);
#line default
#line hidden
}
[System.STAThreadAttribute()]
public static void Main() {
MyApplication.App app = new MyApplication.App();
app.InitializeComponent();
app.Run();
}
我遇到的问题是在实例化后尝试获取对我的MainWindow 类的引用(但这实际上是通过StartupUri 完成的)。我希望能够执行以下操作:
[System.STAThreadAttribute()]
public static void Main() {
MyApplication.App app = new MyApplication.App();
app.InitializeComponent();
MyApplication.MainWindow w = (MyApplication.MainWindow)app.MainWindow;
w.MyProgramIsAwesomeProperty = true;
app.Run();
}
但是,app.MainWindow 始终是 null。我还尝试了以下方法并在 Console.WriteLine 行上设置断点,但程序永远不会到达这些回调:
[System.STAThreadAttribute()]
public static void Main() {
MyApplication.App app = new MyApplication.App();
app.LoadCompleted += app_LoadCompleted;
app.Activated += app_Activated;
app.InitializeComponent();
app.Run();
}
static void app_Activated(object sender, EventArgs e)
{
Console.WriteLine("Activated");
}
static void app_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
Console.WriteLine("LoadCompleted");
}
那么,在我的 Main 函数中实例化 MyApplication.MainWindow 之后,如何获得对它的引用?
【问题讨论】:
-
试试 Application.Current.MainWindow
-
那也是
null。 :-( -
我认为这是因为您需要创建一个 MainWindow 的实例,然后将其分配给 Application.Current.MainWindow