Как изменить StartupUri приложения WPF?
Я пытаюсь изменить приложение.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 должен загружаться, но это не так, в приложении.uri запуска xaml вообще не определен.
Примечание: Ошибка Подтверждена
Я заметил, что ShowDialog устанавливает приложение.MainWindow и когда диалог заканчивается, он возвращает значение null, и из-за этого параметра StartupUri не работает после вызова модального диалога в onstartup или Startup event.
нет ошибки или исключения о недопустимом uri или что-нибудь вроде что.
этот метод работает без вызова диалогового окна в Startup event или OnStartup, я думаю, что вызов showdialog в этом методе вызывает что-то вроде его mainwindow, установленного в expired window, и он выключается после этого.
4 ответов
У вас все еще есть StartupUri, указанный в XAML? Если да, удалите его и посмотрите, поможет ли это.MSDN Source
Если нет, вам может потребоваться подойти к этому по-другому: иметь свой диалог в качестве запуска, а затем с этого момента открыть другое окно на основе выбранного значения.
Akash, я столкнулся с этой проблемой, пытаясь реализовать LoginDialog так же, как ваш. Диалог не есть ошибка, а намеренно.
не ошибка. ShutdownMode по умолчанию Приложение OnLastWindowClosed, поэтому как только закроется первое окно приложение начнет закрываться вниз! Изменение на OnExplicitShutdown и это сработает, но тебе придется управление выключением.
посмотреть этот предыдущих сайте StackOverflow вопрос: WPF ShowDialog возвращает null сразу после второго вызова
вместо переопределения метода 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)
просто попробуйте в OnStartup ():
StartupUri = new Uri("Forms/CustomerEntry.xaml", UriKind.Relative);