转自: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文件中添加两个引用(粗体部分):
<Window x:Class="CrossBowDemo.MainWindow"
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控件:
<
wfi:WindowsFormsHost
>
<!--
Set some properties on Windows Forms control in Xaml
-->
<
wf:DataGridView
x:Name
="dataGridView"
Dock
="Fill"
SelectionMode
="FullRowSelect"
/>
</
wfi:WindowsFormsHost
>
效果图:

本人添加的是 NumericUpDown控件:
<
Grid
Height
="0"
Margin
="146,0,0,116"
MinHeight
="20"
MinWidth
="20"
Name
="grid1"
VerticalAlignment
="Bottom"
HorizontalAlignment
="Left"
Width
="50"
>
<
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();
}
4058

被折叠的 条评论
为什么被折叠?



