C# WPF Как создать общий метод, который может создать конкретное окно

В настоящее время у меня есть этот метод в моем проекте App.Xaml.Cs:

private void ApplicationStart(object sender, StartupEventArgs e)
{
            Current.ShutdownMode = ShutdownMode.OnExplicitShutdown;

            var NetworkConnectionView = new NetworkConnectionView();
            NetworkConnectionView.ShowDialog();

            if (NetworkConnectionView.ConnectionNetWorkServerInternetState == ConnectionStatus.NetworkConnectionSuccess)
            {
                var mainWindow = new MainWindow();
                Current.ShutdownMode = ShutdownMode.OnMainWindowClose;
                Current.MainWindow = mainWindow;
                mainWindow.Show();
            }

            else if (NetworkConnectionView.ConnectionNetWorkServerInternetState == ConnectionStatus.NetworkConnectionFail)
            {
                NetworkErrorView networkErrorWindow = new NetworkErrorView();
                networkErrorWindow.ShowDialog();
                Current.Shutdown(-1);
            }
}

Я хотел бы иметь возможность передать весь его контент на аутсорсинг в статическом методе, содержащемся в библиотеке. Так :

private void ApplicationStart(object sender, StartupEventArgs e)
{
    NetWorkTools.MyExternalMethod();
}

Но я не знаю, как это сделать, потому что MainWindow существует только в моем основном проекте WPF (а также Current). Все остальные методы/классы создаются из моей библиотеки, поэтому у меня не возникнет проблем со ссылками на них.

Непонятно, о чем вы спрашиваете. Должно ли окно создаваться в библиотеке или в коде запуска? в OnStartup вы говорите, что у вас уже есть главное окно (the mainwindow of this project), так что же должен делать этот метод?

Kilazur 09.04.2019 16:43

Извините за отсутствие ясности. Я хочу создать его в своей библиотеке, а не в методе OnStartup.

Eros Guil 09.04.2019 16:49

Так почему у метода есть параметр (the mainwindow of this project), что он означает?

Kilazur 09.04.2019 16:50

Это было просто, чтобы попытаться сделать мою мысль более ясной. я исправил свой пост

Eros Guil 09.04.2019 16:52

Извините, я до сих пор понятия не имею, чего вы на самом деле пытаетесь достичь.

Kilazur 09.04.2019 16:55

Добро пожаловать в StackOverflow! Пожалуйста, задавайте вопрос более конкретно: Что вы пробовали до сих пор с примером кода? (Я проголосовал против, потому что нет кода) / Что вы ожидаете? / Какая у вас ошибка?Для справки взгляните на "Как спросить"

Hille 09.04.2019 17:00

Если ни один из приведенных выше примеров не относится к вашему вопросу, возможно, вопрос не относится к stackoverflow, см. центр помощи и тур.

Hille 09.04.2019 17:00

@Kilazur Извините, я отредактировал свой пост, надеясь, что он станет яснее.

Eros Guil 09.04.2019 17:11

Где будет главное окно? Это по-прежнему должно быть главным окном в вашем вызывающем проекте, или оно настраивается, или находится в вашей библиотеке... или что? А также. NetworkErrorView. Это должно быть в вашей библиотеке управления, в которой находится ваш новый общий метод. Тот, который сэкономит вам вставку 16 строк кода для каждого решения.

Andy 09.04.2019 17:21

@Andy, главное окно будет в вызывающем проекте, а NetworkErrorView уже в моей библиотеке.

Eros Guil 09.04.2019 17:24
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
10
143
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Как я вижу, вы пытаетесь «запустить» главное окно из другой функции. Это работает для всех «Windows», сначала создавая их экземпляры, а затем показывая их.

Mainwindow mw = new Mainwindow();
mw.show();

Хотя эта команда может ответить на вопрос, предоставление дополнительного контекста относительно того, почему и/или как этот код отвечает на вопрос, повышает его долгосрочную ценность. Как ответить

Popo 09.04.2019 17:20
Ответ принят как подходящий

Если вы хотите, чтобы он был универсальным, сделайте это так:

private void ApplicationStart<TWindow>() where TWindow : Window, new()
{
   ...
   Application.Current.MainWindow = new TWindow();
   ...
}

Другие вопросы по теме