您的位置:首页 > 其它

如何在WPF中调用Winform控件

2013-03-27 12:11 330 查看
转自:/article/6020051.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:DataGridViewx:Name="dataGridView"
Dock="Fill" SelectionMode="FullRowSelect"/>


</wfi:WindowsFormsHost>

效果图:



本人添加的是 NumericUpDown控件:


<GridHeight="0"
Margin="146,0,0,116" MinHeight="20" MinWidth="20"
Name="grid1" VerticalAlignment="Bottom" HorizontalAlignment="Left"
Width="50">


<wfi:WindowsFormsHost>


<wf:NumericUpDownx:Name="nupCounter"
Maximum="100"></wf:NumericUpDown>


</wfi:WindowsFormsHost>


</Grid>

效果图:



在本人的代码中Grid的作用相当于Web页面中用来布局的Table。 此处加上Grid是为了方便移动控件的位置。

另一种方法是在后台添加,下面转载自:http://www.2cto.com/kf/201212/173291.html

wpf 中加载winform控件(不是窗体,必须是继承自Control类)
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();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐