Как изменить StartupUri Приложения WPF?

Я пытаюсь изменить 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, устанавливаемый на окно с истекшим сроком, и это закрывается после этого.

17
задан Akash Kava 23 December 2009 в 06:07
поделиться

3 ответа

В XAML все еще есть StartupUri? Если да, удалите его и посмотрите, помогает ли это.MSDN Source

Если нет, то вам может понадобиться подойти к этому по-другому: запустите Dialog, а затем откройте с этого момента другое окно, основанное на выбранном значении.

.
6
ответ дан 30 November 2019 в 11:44
поделиться

вместо того, чтобы переопределить метод 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)

.
6
ответ дан 30 November 2019 в 11:44
поделиться

Акаш, я столкнулся именно с этой проблемой, пытаясь реализовать LoginDialog, как и ваш. В диалоговом окне нет ошибки, скорее, поведение является преднамеренным.

Это не ошибка. По умолчанию ShutdownMode Приложение OnLastWindowClosed, поэтому как только первое окно закрывается ваше приложение начнет закрываться вниз! Измените на OnExplicitShutdown и это будет работать, но вам придется управлять выключением.

См. Предыдущий вопрос на StackOverflow: WPF ShowDialog немедленно возвращает значение null при втором вызове

19
ответ дан 30 November 2019 в 11:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: