我正在尝试修改 App.cs 并从后面的代码加载 WPF XAML 文件,但它不能正常工作。
无论我尝试设置什么 StartupUri 它都不会启动,程序在此之后退出。
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
LoginDialog dlg = new LoginDialog();
if (dlg.ShowDialog() != true)
return;
switch (dlg.ChoiceApp) {
case ChoiceApp.CustomerEntry:
StartupUri = new Uri("/MyApp;component/Forms/CustomerEntry.xaml",
UriKind.Relative);
break;
case ChoiceApp.VendorEntry:
StartupUri = new Uri("/MyApp;component/Forms/VendorEntry.xaml",
UriKind.Relative);
break;
}
}
}
现在我什至进行了跟踪,发现 LoginDialog 工作正常并且返回值正确,但设置“StartupUri”不起作用。
我在反向汇编中检查了 App 的 DoStartup 方法在 OnStartup 之后被调用,所以从技术上讲,我的 StartupUri 必须加载,但它没有,在 App.xaml 中启动 uri 根本没有定义。
注意:已确认错误
我注意到 ShowDialog 设置 Application.MainWindow 并且当对话框结束时,它将其设置回 null,并且由于此设置 StartupUri 在 OnStartup 或 Startup 事件中调用模态对话框后不起作用。
没有关于无效 uri 或类似内容的错误或异常。
此方法无需在 Startup 事件或 OnStartup 中调用 DialogBox 即可工作,我认为在此方法上调用 showdialog 会导致其主窗口设置为过期窗口并在此之后关闭。