转自:http://www.cnblogs.com/masterfy/archive/2009/04/06/1430111.html
http://hi.baidu.com/aqiang000000/blog/item/05507e3692c9b4daa3cc2ba3.html
功能实现主要分三步:
1、添加两个引用:WindowsFormsIntegration.dll (负责整合WPF和Windows)、System.Windows.Forms.
2、在 XAML文件中添加两个引用(粗体部分):
xmlns:wfi ="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"
xmlns:wf ="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Hosting Windows Forms Control In WPF"
Height="300"
Width="650"
ResizeMode="NoResize"
Loaded="WindowLoadedHandler"
>
</Window>
3、在XAML编码区实现你想添加的控件:
原文添加的是 DataGridView控件:
<!-- Set some properties on Windows Forms control in Xaml -->
< wf:DataGridView x:Name ="dataGridView" Dock ="Fill" SelectionMode ="FullRowSelect" />
</ wfi:WindowsFormsHost >
效果图:
本人添加的是 NumericUpDown控件:
< wfi:WindowsFormsHost >
< wf:NumericUpDown x:Name ="nupCounter" Maximum ="100" ></ wf:NumericUpDown >
</ wfi:WindowsFormsHost >
</ Grid >
效果图:
在本人的代码中Grid的作用相当于Web页面中用来布局的Table。 此处加上Grid是为了方便移动控件的位置。
另一种方法是在后台添加,下面转载自:http://www.2cto.com/kf/201212/173291.html
using System.Windows.Controls;
using System.Windows.Forms.Integration;
using Fibonacci; //这个好像不用加
namespace WPFHost
{
/// <summary>
/// Interaction logic for Page1.xaml
/// </summary>
public partial class Page1 : Page
{
private readonly MainForm mainForm = new MainForm();
public Page1()
{
InitializeComponent();
//Create a Windows Forms Host to host a form
WindowsFormsHost windowsFormsHost = new WindowsFormsHost();
stackPanel.Width = mainForm.Width; //stackPanel是前台xaml的一个控件
stackPanel.Height = mainForm.Height;
windowsFormsHost.Width = mainForm.Width;
windowsFormsHost.Height = mainForm.Height;
mainForm.TopLevel = false;
WindowsFormsHost.Child = mainForm;
stackPanel.Children.Add(windowsFormsHost);
}
}
}
最后,关于加过去的winform主题回到旧的主题的样式的问题:
这个问题解决了,重装启动事件就行了。
protected override void OnStartup(StartupEventArgs e)
{
// Raises the Startup event.
base.OnStartup(e);
System.Windows.Forms.Application.EnableVisualStyles();
}