将WPF控件放入Windows窗体表单

时间:2011-02-19 21:00:13

标签: c# .net wpf visual-studio-2008 .net-3.5

如何将WPF控件放入Windows窗体表单?我很可能会将我的WPF控件插入到Windows.Forms.Panel中。

3 个答案:

答案 0 :(得分:34)

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

有关示例,请参阅Walkthrough: Hosting a WPF Composite Control in Windows Forms

答案 1 :(得分:4)

试着读一下:
在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

答案 2 :(得分:0)

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

如果你不想搞乱编辑项目并且想要坚持设计师:

请务必添加WindowsFormsIntegration.dll的引用,该引用通常来自窗口的\ reference assemblies \ 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添加到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
}