WPF - какой способ лучше?

У меня есть приложение WPF, при первом запуске отображается окно для выбора языка. Итак, в App.xaml:

<Application x:Class="MyApp.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="WindowLanguage.xaml">

в WindowLanguage:

public partial class WindowLanguage : Window
{
    bool mainWindowOpened = false;
    public WindowLanguage()
    {
        if (!Settings.Instance.firstStart)
        {
            MainWindow mainWindow = new MainWindow();
            mainWindow.Show();
            Close();
        }

Он работает, но ненужное окно инициализируется.

Я думаю о следующем пути: App.xaml.cs

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);
    if (!Settings.Instance.firstStart)
        StartupUri = new Uri("/MyApp;component/MainWindow.xaml", UriKind.Relative);

}

Этот второй способ с изменением StartupUri лучше или нет? Какой способ лучше всего подходит для моей ситуации (открыть WindowLanguage при первом запуске приложения)?


person Oleg Sh    schedule 20.07.2013    source источник


Ответы (1)


Установка startupUri всегда лучше, чем recreating window снова и снова.

Также есть другие варианты открытия окна, основанные на некоторых условиях, таких как возраст console Main method для открытия окна. Еще несколько вариантов можно найти здесь.

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);
    if (!Settings.Instance.firstStart)
    {
        MainWindow mainWindow = new MainWindow();
        mainWindow.Show();
    }
    else
    {
       WindowLanguage windowLanguage = new WindowLanguage();
       windowLanguage.Show();
    }
}
person Rohit Vats    schedule 20.07.2013
comment
Рохит, поскольку этот ответ влияет на порядок создания окон, не повлияет ли это на выбор ShutdownMode? - person Gayot Fow; 20.07.2013
comment
Нет, порядок окон не меняется. Это просто окно, которое должно отображаться при запуске приложения. Таким образом, никаких изменений в файле shutdownMode не требуется. - person Rohit Vats; 20.07.2013
comment
спасибо! Одно замечание - для использования вашего кода необходимо удалить StartupUri, если вы этого не сделаете - дважды откройте MainWindow - person Oleg Sh; 20.07.2013
comment
Да, забыл упомянуть об этом. - person Rohit Vats; 20.07.2013