Я пытаюсь изменить 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" не работает.
Я зарегистрировался в обратном блоке, которым называют метод DoStartup Приложения после OnStartup, таким образом, технически должен загрузиться мой StartupUri, но он не делает в запуске App.xaml, uri нисколько не определяется.
Примечание: Подтвержденная ошибка
Я заметил, что тот ShowDialog устанавливает Приложение. MainWindow и когда диалоговое окно заканчивается, оно задерживает его к пустому указателю, и из-за этой установки StartupUri не работает после вызова Модального Диалогового окна в событии OnStartup или Startup.
Нет никакой ошибки или исключения о недопустимом uri или чем-либо как этот.
Этот метод работает без DialogBox, называемого в событии Startup или OnStartup, я думаю, звоня showdialog на этом методе, вызывает что-то как его mainwindow, устанавливаемый на окно с истекшим сроком, и это закрывается после этого.
В XAML все еще есть StartupUri? Если да, удалите его и посмотрите, помогает ли это.MSDN Source
Если нет, то вам может понадобиться подойти к этому по-другому: запустите Dialog, а затем откройте с этого момента другое окно, основанное на выбранном значении.
.вместо того, чтобы переопределить метод OnStartup(), подключайтесь к событию.
в XAML
<Application x:Class="SOTestWPF.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Startup="Application_Startup">
<Application.Resources>
</Application.Resources>
</Application>
в коде позади:
private void Application_Startup(object sender, StartupEventArgs e)
{
var rnd = new Random();
if (rnd.NextDouble() > 0.5)
StartupUri = new Uri("/SOTestWPF;component/Window1.xaml", UriKind.Relative);
else
StartupUri = new Uri("/SOTestWPF;component/Window2.xaml", UriKind.Relative);
}
Это только мой тестовый случай, и я проверил, что он работает правильно (случайно :D)
.Акаш, я столкнулся именно с этой проблемой, пытаясь реализовать LoginDialog, как и ваш. В диалоговом окне нет ошибки, скорее, поведение является преднамеренным.
Это не ошибка. По умолчанию ShutdownMode Приложение OnLastWindowClosed, поэтому как только первое окно закрывается ваше приложение начнет закрываться вниз! Измените на OnExplicitShutdown и это будет работать, но вам придется управлять выключением.
См. Предыдущий вопрос на StackOverflow: WPF ShowDialog немедленно возвращает значение null при втором вызове