如何将WPF控件放入Windows窗体表单?我很可能会将我的WPF控件插入到Windows.Forms.Panel中。
答案 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重新加载项目并运行应用程序。
答案 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
}