it-swarm.com.de

Fügen Sie das WPF-Steuerelement in ein Windows Forms Form ein

Wie fügen Sie ein WPF-Steuerelement in ein Windows Forms Form ein? Wahrscheinlich werde ich mein WPF-Steuerelement in ein Windows.Forms.Panel einfügen. 

30
Darkhydro

Fügen Sie ein ElementHost Steuerelement in das Panel ein. Dieses Steuerelement kann dann ein WPF-Element hosten. Im WinForms-Designer finden Sie dieses Steuerelement unter "WPF-Interoperabilität". Zunächst müssen Sie möglicherweise WindowsFormsIntegration.dll zu den Referenzen Ihres Projekts hinzufügen.

Ein Beispiel finden Sie unter Exemplarische Vorgehensweise: Bereitstellen eines WPF-Verbundsteuerelements in Windows Forms .

34
Ani

Versuchen Sie, dies zu lesen:
Hosten eines WPF-Steuerelements in einer Windows Forms-Anwendung
http://community.infragistics.com/wpf/articles/hosting-a-wpf-control-in-a-windows-forms-application.aspx

Fügen Sie zunächst Verweise auf die WPF-Namespaces hinzu (PresentationCore, PresentationFramework, UIAutomationProvider, UIAutomationTypes und WindowsBase). Erstellen Sie als Nächstes eine Instanz des ElementHost-Steuerelements und des Steuerelements, das Sie in die Windows Forms-Anwendung einbetten möchten, und verknüpfen Sie dieses Steuerelement mit dem ElementHost-Steuerelement. Fügen Sie dann einfach das ElementHost-Steuerelement Ihrer Forms-Steuerelementsammlung hinzu:

    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);

Wenn Sie jedoch XAML verwenden möchten, um das WPF-Steuerelement zu beschreiben, das Sie in der Windows Forms-Anwendung verwenden möchten, müssen Sie Ihrem Projekt ein Avalon UserControl-Element hinzufügen. Dadurch werden eine UserControl1.xaml-Datei und eine UserControl1.xaml.cs-Datei erstellt. Sie können dann die UserControl1.xaml-Datei so ändern, dass sie die XAML enthält, die Sie für Ihr Steuerelement beschreiben möchten. Dann erstellen Sie einfach eine Instanz dieses Steuerelements und fügen es dem hinzu 

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);

Darüber hinaus müssen Sie die Projektdatei ändern, da die Windows-Anwendung nicht mit der XAML-Datei zu tun hat. Sie müssen die Projektdatei (.csproj, .vbproj usw.) in einem Editor wie Notepad öffnen und dann nach unten scrollen. Sie sehen die folgende Zeile:

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

Sie müssen diese Zeile kopieren und direkt unter der obigen Zeile einfügen und dann "CSharp" in "WinFX" ändern, sodass die beiden Zeilen wie folgt aussehen:

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

Speichern Sie nun diese Datei und laden Sie das Projekt erneut mit VS und führen Sie die Anwendung aus.



Quelle: http://windowsclient.net/learn/integration.aspx

4
Sergey Gavruk

Zusammenfassend die obigen Antworten zur schnellen Referenz:

wenn Sie sich nicht mit der Bearbeitung des Projekts beschäftigen möchten und beim Designer bleiben möchten:

stellen Sie sicher, dass Sie einen Verweis für WindowsFormsIntegration.dll hinzufügen, der normalerweise aus den\Referenzbaugruppen\Microsoft\Framework des Fensters stammt.

und wenn Sie in Ihrer Lösung ein wpf-usercontrol verwenden, haben Sie wahrscheinlich bereits Verweise darauf 

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

andernfalls müssen Sie unbedingt die erforderlichen abgehenden Verweise hinzufügen.

in einem Windows-Formularmitglied fügen Sie dem Windows-Formular wie folgt das WPF-Benutzersteuerelement myWpfUsrCtl hinzu

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
}
0
gg89