Страницы

Поиск по вопросам

вторник, 29 января 2019 г.

C# - Создание WPF окна в dll

Можно ли создать dll с функцией (в каком-то классе), которая строит WPF окно.


Ответ

Конечно!
Вы точно так же можете из любой функции создать окно:
var window = new MyWindow(); window.Show();
Не забудьте подключить сборки PresesntationCore, PresentationFramework и WindowsBase, а в свежей версии ещё и System.Xaml. И вы можете точно так же определить класс с окном в DLL, как и в основном приложении, через XAML.
Если у вас не получается добавить XAML для окна, вам понадобится вручную отредактировать csproj, как указано здесь

Если вы не в UI-потоке, и у вас WPF-приложение, вам придётся перебросить выполнение туда. Например, так:
Application.Current.Dispatcher.InvokeAsync(() => { var window = new MyWindow(); window.Show(); });

Если у вас консольное приложение, всё немного сложнее, т. к. у вас нету UI-потока. Вам нужно его создать. Как это делать, написано здесь
Вот рабочий пример:
var thread = new Thread(() => { var window = new MyWindow(); window.Show(); Dispatcher.Run(); });
thread.SetApartmentState(ApartmentState.STA); thread.Start();

Комментариев нет:

Отправить комментарий