Возможно ли иметь проект, содержащий как Winforms, так и WPF?
Скажите, что проект WinForm, который поэтапно преобразуется (форма по форме) в WPF, будет иметь возможность открытия Winform на кнопке, а WPF - на другой кнопке?
Возможно ли иметь проект, содержащий как Winforms, так и WPF?
Скажите, что проект WinForm, который поэтапно преобразуется (форма по форме) в WPF, будет иметь возможность открытия Winform на кнопке, а WPF - на другой кнопке?
Да. Вы должны выбрать одну технологию для отображения каждого физического окна и управления в своем приложении, но нет причин, по которым вы не можете смешивать и сопоставлять.
Например:
Это отлично работает. В 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
Что бы вы искали, это элемент управления 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
. Это мощный, но сложно и трудно получить право.)
Добавление 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. он может быть другим в вашем). См. эту ссылку.
Я не вижу возражений против этого (у меня есть в WinForms Application WPF windows) Многие из примеров использовали MessageBox.Show, который является частью Windows.Forms. Конечно, вы должны переписать все окна, а не только элементы управления.