Запуск окна проекта из другого проекта wpf
У меня есть 2 проекта, оба на wpf, оба на .Net Framework 4.8, вопрос в том как мне из одного проекта открыть главное окно другого желательно с присвоением owner, дело в том что если я пишу так:
bool isWindowOpen = false;
foreach (Window w in System.Windows.Application.Current.Windows)
{
if (w is ChunkCollector.MainWindow)
{
isWindowOpen = true;
w.Activate();
}
}
if (!isWindowOpen)
{
Window FilterTypWindow = new ChunkCollector.MainWindow()
{
Owner = System.Windows.Application.Current.MainWindow
};
FilterTypWindow.Show();
}
то получаю исключение "невозможно указать себя в свойстве Owner"
Если я использую просто ShowDialog() таким образом:
MainWindow1 ChunkCollectorWindow = new MainWindow1();
ChunkCollectorWindow.ShowDialog();
то при закрытии окна ChunkCollectorWindow закрывается и главное окно основного проекта. Важен еще и тот факт, что все эти странности происходят после публикации проекта, в дебаге работает все как нужно. Подскажите пожалуйста нормальный способ запуска и закрытия окон при работе с двумя и более проектами.
Ответы (1 шт):
Шаг 1:
Подключить к главному проекту второй через ссылки
Если они в одном решении, то можно через вкладку "Проекты"

Если в разных или же вам не нравится 1, то через .exe файл второго приложения:
Для наглядности я так и сделал.
Шаг 2:
Реализация во 2 приложении
НЕ УДАЛЯЙТЕ КОНСТРУКТОР БЕЗ АРГУМЕНТОВ!!!
public MainWindow() ///Оставляем обязательно. Если профи, то можешь удалить но с ошибками разбирайся сам
{
InitializeComponent();
txt.Text = "Ничего не было, запущено напрямую";
}
public MainWindow(string a) ///пример передачи аргумента
{
InitializeComponent();
txt.Text = "Сообщение от окна 1: " + a;
}
Реализация в 1 приложении
Просто подключаем пространство имён второго приложения, либо используем напрямую (как я)
private void Button_Click(object sender, RoutedEventArgs e)
{
new WpfApp2.MainWindow("тест123abc").Show(); ///Передаём аргумент
}
Шаг 3
Запускаем и радуемся что всё работает
QA:
1. Это два независимых проекта?
Да, это два независимых проекта.
2. Могу ли я передать что хочу второму окну?
Да, можно. Пример есть в коде.
3. Что, если проекты на разных платформах(.NET Core, .NET)?
Пробуйте, но может не работать
4. А если на другом ЯП?
Нет.
5. Нужно ли для этого заранее запускать второй проект? И будет ли он работать с запущенным экземпляром?
Нет, запускать не надо. Нет, не будет, так как второй проект используется как библиотека. Исполнение идёт от имени первого проекта, но логика не меняется.
