Возможно ли иметь проект, содержащий как Winforms, так и WPF? - PullRequest
11 голосов
/ 30 июня 2010

Возможно ли иметь проект, содержащий как Winforms, так и WPF?

Скажите, что проект WinForm, который поэтапно преобразуется (форма за формой) в WPF, можно ли открыть Winform на кнопке, а WPF - на другой кнопке?

Ответы [ 5 ]

15 голосов
/ 30 июня 2010

Да. Вам нужно выбрать одну технологию для отображения каждого физического окна и элемента управления в вашем приложении, но нет никаких причин, по которым вы не можете смешивать и сопоставлять.

Например:

  • Окно WinForms может отображать окно WPF.
  • Окно WPF может отображать окно WinForms.
  • Окно WinForms может содержать содержимое WPF (см. Элемент управления ElementHost ).
  • Окно WPF может содержать элементы управления WinForms (см. элемент управления WindowsFormsHost ).
2 голосов
/ 30 июня 2010

Это прекрасно работает.Можно иметь окна WPF в Windows Forms и окна Windows Forms в WPF

http://msdn.microsoft.com/en-us/library/ms745781.aspx

http://msdn.microsoft.com/en-us/library/system.windows.forms.integration.windowsformshost.aspx

1 голос
/ 24 сентября 2014

Добавление Winforms к проектам WPF можно выполнить плавно (прямо из меню «Добавить новый элемент»), но нет прямой возможности добавить окно WPF в проект Winforms. Тем не менее, я выполнил это, выполнив следующие действия:

  1. Добавить пользовательский элемент управления WPF (эта опция доступна в разделе «Добавить новый»). пункт "меню), а затем преобразовать его в окно WPF. Изменить XAML изменив родительский тег UserControl на Window, и удалите наследование от UserControl (все это объясняется в этой ссылке ).

  2. Добавить ссылку на System.Xaml.dll. Смотрите эту ссылку .

  3. Добавить ссылку на System.Windows.dll (я нашел ее на своем компьютере по этому пути: C: \ Program Files (x86) \ Ссылочные сборки \ Microsoft \ Framework.NETFramework \ v4.5. у тебя может быть по другому). Смотрите эту ссылку .

1 голос
/ 30 июня 2010

То, что вы можете искать, это ElementHost элемент управления. Он позволяет вам брать содержимое WPF и размещать его в окне Windows Forms. Более подробная информация здесь:

http://msdn.microsoft.com/en-us/library/ms745781.aspx

Существует также элемент управления, который позволяет делать наоборот: размещать содержимое Windows Forms из WPF:

http://nayyeri.net/host-windows-forms-controls-in-wpf

Между ними вы можете перемещать «разделительную линию» между WPF и Windows Forms с некоторой степенью гибкости.

Есть одна оговорка, о которой вам нужно помнить. Windows Forms внутренне работает в терминах HWND ... окна, управляемого старым оконным менеджером Windows (который обрабатывает z-порядок). WPF этого не делает ... Дерево WPF обычно визуализируется в один HWND ', и именно WPF управляет такими вещами, как z-порядок. Для вас это означает, что z-порядок не всегда работает так, как вы ожидаете, и есть вещи, которые вы не можете сделать с размещенными элементами управления Windows Forms, которые вы можете сделать с традиционными элементами WPF. (На самом деле существует способ решить эту проблему, но он включает в себя периодическую визуализацию HWND в битовую карту памяти, рендеринг этой битовой карты в поверхность WPF, а затем перенаправление событий, направленных на поверхность WPF, в базовый HWND. но сложно и сложно получить права.)

0 голосов
/ 30 июня 2010

Я не вижу никаких возражений против этого (у меня в окнах WPF приложения WinForms). Во многих примерах используется MessageBox.Show, который является частью Windows.Forms.Конечно, вы должны переписать все окна, а не только элементы управления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...