Подтвердить что ты не робот

Как настроить запуск приложения WPF?

Когда создается новый проект приложения WPF, автоматически генерируются MainWindow.xaml, App.xaml и их соответствующий код за классами. В App.xaml есть атрибут, который определяет, какое окно будет запущено изначально, и по умолчанию оно StartupUri="MainWindow.xaml"

Я создал новый класс Dispatcher в том же проекте. При запуске я хочу, чтобы экземпляр этого класса Dispatcher был создан, а затем один из его методов для запуска. Этот метод фактически создаст и покажет окно MainWindow. Итак, как мне изменить App.xaml или App.xaml.cs, чтобы это произошло? Или, если это невозможно сделать с помощью App, как мне его реализовать? Спасибо.

4b9b3361

Ответ 1

Вы можете удалить атрибут StartupUri из App.xaml.

Затем, создав переопределение для OnStartup() в App.xaml.cs, вы можете создать свой новый экземпляр класса Dispatcher.

Вот что выглядит моя быстрая реализация app.xaml.cs:

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
      base.OnStartup(e);

      new MyClassIWantToInstantiate();
    }
  }
}

Обновление

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

Ответ 2

Попробуйте использовать событие Startup (приложение класса) - MSDN.

Вы можете показать MainWindow в этом обработчике событий - после создания экземпляра Dispatcher.

Ответ 3

Решение от @Eric Olsson мне очень помогло. Как новый разработчик, я поделился тем, что узнал сегодня, для кого-то другого...

Используя этот метод, а также пример, приведенный здесь, я смог структурировать свое приложение без использования статических объектов.

Ранее мое приложение StartupURI было настроено на MainWindow, как обычно. Выключив код MainWindow, я создал несколько статических объектов для своего приложения. Я хотел научиться структурировать приложение, не используя статические объекты, и эти два примера мне очень помогли.

Вот пример того, что я сделал:

1) Удалена ссылка MainWindow StartupURI из MainWindow.xaml.

2) Создал мой собственный метод OnStartup, используя StartupEventArgs

3) В этом новом методе я создал свою модель представления, на которую мне нужно было сослаться.

4) Я использовал второй пример (связанный) для доступа к свойствам своего приложения, чтобы я мог ссылаться на экземпляр ViewModel.

Новая последовательность запуска:

public partial class App : Application
{
    public MainWindow Main_Window { get; set; }
    public MainWindow_ViewModel MainWindow_VM { get; set; }

    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);

        Main_Window = new MainWindow();
        MainWindow_VM = new MainWindow_ViewModel();
        Main_Window.Show();
    }
}

Пример для подключения к объекту ViewModel из App.xaml.cs:

var CurrentApplication = Application.Current as App;
var MainWindow_VM = CurrentApplication.MainWindow_VM;

или же...

var MainWindow_VM = ((App)Application.Current).MainWindow_VM.;