Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

Например:

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

Ответ 3

Что бы вы искали, это элемент управления 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-order. Это означает, что z-порядок не всегда работает так, как вы ожидаете, и есть вещи, которые вы не можете сделать с размещенными элементами управления Windows Forms, которые вы можете использовать с традиционными элементами WPF. (На самом деле есть способ решить эту проблему, но она предполагает периодическое рендеринг HWND в растровое изображение памяти, рендеринг этого растрового изображения в поверхность WPF и последующее перенаправление событий, направленных на поверхность WPF, в базовый HWND. Это мощный, но сложно и трудно получить право.)

Ответ 4

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

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

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

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

Ответ 5

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