繁体   English   中英

将 WPF 控件放入 Windows Forms 窗体?

[英]Put WPF control into a Windows Forms Form?

如何将 WPF 控件放入 Windows 窗体Form 我很可能会将我的 WPF 控件插入到Windows.Forms.Panel

在面板内放置一个ElementHost控件。 然后,此控件可以承载 WPF 元素。 在 WinForms 设计器中,您可以在“WPF 互操作性”下找到此控件。 首先,您可能需要将WindowsFormsIntegration.dll添加到项目的引用中。

有关示例,请参阅演练:在 Windows 窗体中托管 WPF 复合控件

尝试阅读以下内容:
在 Windows 窗体应用程序中托管 WPF 控件
http://community.infragistics.com/wpf/articles/hosting-a-wpf-control-in-a-windows-forms-application.aspx

首先添加对 WPF 命名空间(PresentationCore、PresentationFramework、UIAutomationProvider、UIAutomationTypes 和 WindowsBase)的引用。 接下来创建 ElementHost 控件和您希望嵌入到 Windows 窗体应用程序中的控件的实例,然后将该控件挂接到 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来描述要在 Windows 窗体应用程序中使用的 WPF 控件,则需要将 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

总结以上答案以供快速参考:

如果您不想编辑项目并想坚持使用设计师:

一定要添加对WindowsFormsIntegration.dll引用,它通常来自窗口的 \\reference assembly\\microsoft\\Framework...

如果您在解决方案中使用 wpf 用户控件,您可能已经获得了对

System.Windows.Presentation、System.Windows.Activities、System.Windows.CompnentModel、System.Windows..RunTime、System.Windows.WorkFlowServices、System.Xaml。

否则一定要添加所需的上述引用。

在 windows 窗体成员中,您将 wpf usercontrol myWpfUsrCtl 添加到 windows 窗体中,如下所示

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

    ... // change to to suit your need

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM