Как поместить пользовательский элемент управления Windows Forms в приложение WPF? - PullRequest
5 голосов
/ 21 августа 2009

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

Спасибо, Sam

Ответы [ 3 ]

7 голосов
/ 21 августа 2009

Вы не можете действительно добавить его в качестве элемента управления на панель инструментов, как вы могли бы для приложения 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>
3 голосов
/ 21 августа 2009

Добавьте ссылку на 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 );
0 голосов
/ 23 марта 2012

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

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