gpt4 book ai didi

c# - 在 WPF 的自定义 main() 中获取对 MainWindow 的引用

转载 作者:太空宇宙 更新时间:2023-11-03 23:29:46 24 4
gpt4 key购买 nike

我正在尝试为我的 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 的引用?

最佳答案

实际上,StartupUri 的设置并没有实例化主窗口,也没有设置相应的Application.MainWindow 属性。这稍后会发生,在调用 Run 方法之后,这就是您获得 null 的原因。

正确的方法是避免 StartupUri 并覆盖 OnStartup方法(虽然您可以按照建议添加事件处理程序,但它在派生类中没有多大意义)。然后,在OnStartup中,您可以直接实例化主窗口并设置您要设置的属性。

关于c# - 在 WPF 的自定义 main() 中获取对 MainWindow 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32725049/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com