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

Поместите элемент управления WPF в форму Windows Forms

Как вы помещаете элемент управления WPF в форму Windows Forms? Скорее всего, я буду вставлять свой WPF-элемент в Windows.Forms.Panel.

4b9b3361

Ответ 1

Поместите элемент управления ElementHost внутри панели. Затем этот элемент управления может содержать элемент WPF. Из конструктора WinForms вы можете найти этот элемент управления в разделе "WPF Interoperability". Сначала вам может потребоваться добавить WindowsFormsIntegration.dll в ссылки на проект.

Например, см. Пошаговое руководство. Хостинг WPF Composite Control в Windows Forms.

Ответ 2

Попробуйте прочитать следующее:
Хостинг WPF-элемента управления в приложении Windows Forms
http://community.infragistics.com/wpf/articles/hosting-a-wpf-control-in-a-windows-forms-application.aspx

Сначала добавьте ссылки на пространства имен WPF (PresentationCore, PresentationFramework, UIAutomationProvider, UIAutomationTypes и WindowsBase). Затем создайте экземпляр элемента управления ElementHost и элемент управления, который вы хотите встроить в приложение Windows Forms, а затем подключите этот элемент управления до элемента управления ElementHost. Затем просто добавьте элемент управления ElementHost в коллекцию управления Forms:

    ElementHost host = new ElementHost();
    System.Windows.Controls.ListBox wpfListBox = new System.Windows.Controls.ListBox();
    for (int i = 0; i < 10; i++)
    {
    wpfListBox.Items.Add("Item " + i.ToString());
    }
    host.Dock = DockStyle.Fill;
    host.Controls.Add(wpfListBox);
    this.panel1.Controls.Add(host);

Однако, если вы хотите использовать XAML для описания элемента управления WPF, который вы хотите использовать в приложении Windows Forms, вам нужно добавить элемент Avalon UserControl в свой проект. Это создаст файл UserControl1.xaml и файл UserControl1.xaml.cs. Затем вы можете изменить файл UserControl1.xaml, чтобы указать любой XAML, который вы хотите описать вашим элементом управления. Затем вы просто создадите экземпляр этого элемента управления и добавьте его в

ElementHost control as in the above example:
ElementHost host = new ElementHost();
UserControl1 uc1 = new UserControl1();
host.Controls.Add(uc1);
host.Dock = DockStyle.Fill;
this.panel1.Controls.Add(host);

Кроме того, вам нужно будет изменить файл проекта, потому что приложение Windows не имеет никакого отношения к файлу XAML. Вам нужно будет открыть файл проекта (.csproj,.vbproj и т.д.) В редакторе, таком как "Блокнот", а затем прокрутите вниз. Вы увидите следующую строку:

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />

Вам нужно будет скопировать эту строку и вставить ее чуть ниже указанной строки, а затем изменить "CSharp" на "WinFX", чтобы две строки выглядели следующим образом:

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildBinPath)\Microsoft.WinFx.targets" />

Теперь сохраните этот файл и перезагрузите проект с помощью VS и запустите приложение.



Источник: http://windowsclient.net/learn/integration.aspx

Ответ 3

Обобщая вышеприведенные ответы для краткого ознакомления:

если вы не хотите возиться с редактированием проекта и хотите остаться с дизайнером:

обязательно добавьте ссылку на WindowsFormsIntegration.dll которая обычно находится в окне\справочные сборки \microsoft\Framework...

и если вы используете wpf usercontrol в своем решении, вы, вероятно, уже получили ссылки на

System.Windows.Presentation, System.Windows.Activities, System.Windows.CompnentModel, System.Windows..RunTime, System.Windows.WorkFlowServices, System.Xaml.

в противном случае обязательно добавьте необходимые исходящие ссылки.

в элементе формы Windows вы добавляете wpf usercontrol myWpfUsrCtl в форму окна следующим образом

void addWpfUsrCntl()
{
    var elemthost1 = new System.Windows.Forms.Integration.ElementHost();

    elemthost1.Dock = DockStyle.None; // change to to suit your need

     // you can add the WPF control to the form or any other desired control
    elemthost1.Parent = this;

    //elemthost1.AutoSize = true; // change to to suit your need

    FinCurl_.AutoSize = true; // change to to suit your need

    elemthost1.Child = myWpfUsrCtl; // Assign the WPF control
}