4

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

0xdb
  • 51,614
RostovDA
  • 505

1 Answers1

6

Конечно!

Вы точно так же можете из любой функции создать окно:

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();
VladD
  • 206,799