Próbuję zmodyfikować App.cs i załadować pliki XAML WPF z kodu, ale nie działa tak jak powinien.Jak zmienić StartupUri aplikacji WPF?
Bez względu na to, co próbuję ustawić jako StartupUri, nie uruchamia się, program kończy się po tym.
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;
}
}
}
Teraz nawet nie śladowe i okazało się, że LoginDialog działa poprawnie i wraca wartości poprawnie, ale ustawienie „StartupUri” nie działa.
Sprawdziłem w odwrotnej kolejności, że metoda AppStartup jest wywoływana po uruchomieniu OnStartup, więc technicznie mój StartupUri musi się załadować, ale to nie robi, w App.xaml URI uruchamiania nie jest w ogóle zdefiniowany.
Uwaga: Bug Potwierdzony
zauważyłem, że ShowDialog ustawia Application.MainWindow a gdy końce dialogowych, ustawia go na null, a ze względu na to ustawienie StartupUri nie działa po wywołaniu modalnego okna dialogowego w OnStartup lub Zdarzenie początkowe.
Nie ma błędu ani wyjątku dotyczącego nieprawidłowego identyfikatora użytkownika lub czegoś podobnego.
Ta metoda działa bez wywoływania DialogBox w zdarzeniu Startup lub OnStartup, myślę, że wywołanie showdialog w tej metodzie powoduje, że jego okno główne jest ustawione na wygasłe okno, a następnie zostaje wyłączone.
Zrobiłem dokładnie tak, jak powiedziałeś, jednak jest to pewne obejście, ale z punktu widzenia projektowania aplikacji, uruchomienie StartupUri powinno działać i wygląda trochę ładnie, co jest łatwe do udokumentowania i wyjaśnienia. Dzięki za Twoją sugestię. –