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