Как поместить пользовательский элемент управления Windows Forms в приложение WPF?

В качестве краткосрочного решения я пытаюсь вставить форму windows 'usercontrol' в приложение WPF. Я вижу в представлении приложения WPF, что я могу добавить "пользовательский элемент управления формы Windows" в проект, и он создает пустой пользовательский элемент управления, но я не могу понять, как его добавить. В идеале я хотел бы знать, как взять.dll из моих скомпилированных оконных форм пользовательского элемента управления и вставить его в приложение WPF или импортировать пользовательский элемент управления в приложение WPF.

Спасибо Сэм

3 ответа

Решение

Вы не можете добавить его в качестве элемента управления на панель инструментов, как вы могли бы для приложения Windows Forms. Вместо этого вам следует "разместить" пользовательский элемент управления внутри приложения WPF.

Посмотрите, как это сделать на MSDN.

Вот пример того, как использовать замаскированное текстовое поле (которое вы можете легко изменить, используя свой пользовательский элемент управления):

<Window x:Class="Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"  
Title="HostingWfInWpf">
<Grid>
    <WindowsFormsHost>
       <wf:MaskedTextBox x:Name="mtbDate" Mask="00/00/0000"/>
    </WindowsFormsHost>
</Grid>
</Window>

Добавьте ссылку на System.Windows.Forms и WindowsFormsIntegration в ваш проект

xmlns:WinForms="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
xmlns:WindowsFormsIntegration="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"

И поместите Windows формы хоста в окне.

  <WindowsFormsHost Name="wfhDate"  
                    HorizontalAlignment="Center" 
                    VerticalAlignment="Stretch">
                <WinForms:FlowLayoutPanel/>
  </WindowsFormsHost>

Теперь в коде C#

using Forms = System.Windows.Forms;
.........................
Forms.FlowLayoutPanel flpPanel = this.wfhDate.Child as Forms.FlowLayoutPanel;
// Initialize your Forms contol here.
flpPanel.Controls.Add( yourControl );

Лукас ответил правильно, но я хотел добавить что-то необходимое. Если вы создаете веб-приложение, вы должны изменить настройку "Безопасность" на "Это приложение с полным доверием". Я не мог заставить работать элемент управления WindowsFormsHost до этого.

Другие вопросы по тегам