Как настроить запуск приложения WPF?
Когда создается новый проект приложения WPF, автоматически генерируются MainWindow.xaml
, App.xaml
и их соответствующий код за классами. В App.xaml
есть атрибут, который определяет, какое окно будет запущено изначально, и по умолчанию оно StartupUri="MainWindow.xaml"
Я создал новый класс Dispatcher
в том же проекте. При запуске я хочу, чтобы экземпляр этого класса Dispatcher
был создан, а затем один из его методов для запуска. Этот метод фактически создаст и покажет окно MainWindow
. Итак, как мне изменить App.xaml
или App.xaml.cs
, чтобы это произошло? Или, если это невозможно сделать с помощью App
, как мне его реализовать? Спасибо.
Ответы
Ответ 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.;