本文转自:http://blog.csdn.net/lianchangshuai/article/details/6415241

下面以在Wpf中添加ZedGraph(用于创建任意数据的二维线型、条型、饼型图表的一个开源类库)控件,说明在WPF中使用Winform控件的方法。

1、      首先添加对如下两个dll文件的引用:WindowsFormsIntegration.dll,System.Windows.Forms.dll。

2、      由于要用到ZedGraph控件,所以也要添加对ZedGraph.dll的引用。

3、      在要使用WinForm控件的WPF窗体的XAML文件中添加如下内容(选中部分):

即: xmlns:wfi ="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"

xmlns:wf ="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"

xmlns:zedgraph="clr-namespace:ZedGraph;assembly=ZedGraph"

4、       在WPF的容器控件内如Grid内首先要添加WinForm控件的宿主容器,用于衔接WPF和WinForm,

对应XAML如下:

<Grid>

<wfi:WindowsFormsHost Width="300" HorizontalAlignment="Right">

<wf:Label x:Name="lblName" Text="winForm控件在此” />

</wfi:WindowsFormsHost>

<wfi:WindowsFormsHost>

<wf:Button x:Name="nnn" Text="确定”/>

</wfi:WindowsFormsHost>

<wfi:WindowsFormsHost>

<zedgraph:ZedGraphControl x:Name="zedGraphControl" />

</wfi:WindowsFormsHost>

<Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="10,10,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />

</Grid>

说明:<wfi:WindowsFormsHost></wfi:WindowsFormsHost>即为WinForm控件的宿主容器,每一个宿主容器只能放一个WinForm控件,如下例,放了三个WinForm控件,分别放在三个宿主容器里面,该容器可以设置属性来调整大小和布局。

注意:如上我添加的WinForm控件如在指定其Name时,必须加前缀x:,如添加Lable时<wf:Label x:Name="lblName" Text="我是WPF中的WinForm控件” />,否则后台代码无法访问。

5、       如果要在WPF后台代码中访问上面的Lable,可直接像在WinForm中使用一样。如在点击某一按钮时改变Lable内容,代码如下:lblName.Text=”内容已改变”;

6、       以使用WinForm控件ZedGraph绘制曲线为例,说明后台用法:

在后台用Using添加对System.Windows.Forms和ZedGraph和System.Drawing命名空间的引用,完整后台代码如下:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Data;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Imaging;

using System.Windows.Navigation;

using System.Windows.Shapes;

using System.Windows.Forms;

using ZedGraph;

using System.Drawing;

namespace ZedGraphAtWpf2

{

/// <summary>

/// MainWindow.xaml 的交互逻辑

/// </summary>

public partial class MainWindow : Window

{

public MainWindow()

{

InitializeComponent();

}

private void button1_Click(object sender, RoutedEventArgs e)

{

lblName.Text =”我是WinForm控件”;

}

private void Window_Loaded(object sender, RoutedEventArgs e)

{

ZedGraph.GraphPane myPane = zedGraphControl.GraphPane;

myPane.Title.Text = "My Test Graph/n(For CodeProject Sample)";

myPane.XAxis.Title.Text = "My X Axis";

myPane.YAxis.Title.Text = "My Y Axis";

PointPairList list1 = new PointPairList();

PointPairList list2 = new PointPairList();

for (int i = 0; i < 36; i++)

{

double x = (double)i + 5;

double y1 = 1.5 + Math.Sin((double)i * 0.2);

double y2 = 3.0 * (1.5 + Math.Sin((double)i * 0.2));

list1.Add(x, y1);

list2.Add(x, y2);

}

// Generate a red curve with diamond

// symbols, and "Porsche" in the legend

LineItem myCurve = myPane.AddCurve("Porsche",

list1, System.Drawing.Color.Red, SymbolType.Diamond);

// Generate a blue curve with circle

// symbols, and "Piper" in the legend

LineItem myCurve2 = myPane.AddCurve("Piper",

list2, System.Drawing.Color.Blue, SymbolType.Circle);

zedGraphControl.AxisChange();

}

}

}

完整XAML如下:

<Window x:Class="ZedGraphAtWpf2.MainWindow"

xmlns:wfi ="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"

xmlns:wf ="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"

xmlns:zedgraph="clr-namespace:ZedGraph;assembly=ZedGraph"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">

<Grid>

<wfi:WindowsFormsHost Width="300" HorizontalAlignment="Right">

<wf:Label x:Name="lblName" Text="WinForm控件在此” />

</wfi:WindowsFormsHost>

<wfi:WindowsFormsHost>

<wf:Button x:Name="nnn" Text="确定” />

</wfi:WindowsFormsHost>

<wfi:WindowsFormsHost>

<zedgraph:ZedGraphControl x:Name="zedGraphControl" />

</wfi:WindowsFormsHost>

<Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="10,10,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />

</Grid>

</Window>

[转]在WPF中使用WinForm控件方法的更多相关文章

  1. 在WPF中使用WinForm控件方法

    1.      首先添加对如下两个dll文件的引用:WindowsFormsIntegration.dll,System.Windows.Forms.dll. 2.      在要使用WinForm控 ...

  2. 在WPF中调用Winform控件

    最近在项目中用到了人脸识别和指纹识别,需要调用外部设备和接口,这里就用到了在WPF中调用Winform控件. 第一步,添加程序集引用.System.Windows.Forms和WindowsForms ...

  3. wpf中插入winform控件并获取句柄

    因工作需要使用wpf做界面,而有个开发包依赖picturebox控件,上网研究了一下,总算弄通了. 首先在项目中添加引用System.Windows.Forms与WindowsFormsIntegra ...

  4. 如何在WPF中调用Winform控件

    原文地址:http://hi.baidu.com/stuoopluwqbbeod/item/32ec38403da42ee2bcf45167 功能实现主要分三步:1.添加两个引用:WindowsFor ...

  5. Wpf使用Winform控件后Wpf元素被Winform控件遮盖问题的解决

    有人会说不建议Wpf中使用Winform控件,有人会说建议使用Winform控件在Wpf下的替代方案,然而在实际工作中由于项目的特殊需求,考虑到时间.成本等因素,往往难免会碰到在WPF中使用Winfr ...

  6. WPF保存包含Winform控件的XAML页面问题

    原文:WPF保存包含Winform控件的XAML页面问题 最近的工作中,用到了WPF调用Winform控件 但是在保存XAML页面的时候发现了问题,就是Winform页面黑黑的,没有任何渲染的波形曲线 ...

  7. WPF中的image控件的Source赋值

    WPF中的Image控件Source的设置 1.XAML中 简单的方式(Source="haha.png"); image控件的Source设置为相对路径后(Source=&quo ...

  8. WPF中的ControlTemplate(控件模板)(转)

    原文地址 http://www.cnblogs.com/zhouyinhui/archive/2007/03/28/690993.html WPF中的ControlTemplate(控件模板)     ...

  9. WPF中的ControlTemplate(控件模板)

    原文:WPF中的ControlTemplate(控件模板) WPF中的ControlTemplate(控件模板)                                             ...

随机推荐

  1. c# abstract抽象类与继承类子类的构造函数_base

    http://blog.itpub.net/9240380/viewspace-718054/ http://blog.163.com/cloud_thegreat/blog/static/10367 ...

  2. 转载:如何利用Vim进行Erlang开发

    转自:http://ovalpo.info/how_to_use_vim_for_erlang_dev/ 如何利用Vim进行Erlang开发 by Martin J. Logan on Septemb ...

  3. Hanganalyze 使用

    It is  important to find the that the reason hangs the database. How can we do, is a headache thing. ...

  4. 微价值:专訪《甜心爱消除》个人开发人员Lee,日入千元!

    [导语]我们希望能够对一些个人开发人员进行专訪,这样大家更能显得接地气,看看人家做什么,怎么坚持.<甜心爱消除>作者Lee是三群的兄弟,也关注微价值.微价值的文章还是能够的,得到一些业内大 ...

  5. 「译」JavaScript 的怪癖 1:隐式类型转换

    原文:JavaScript quirk 1: implicit conversion of values 译文:「译」JavaScript 的怪癖 1:隐式类型转换 译者:justjavac 零:提要 ...

  6. codeforces Gym 100187A A. Potion of Immortality

    A. Potion of Immortality Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/1001 ...

  7. winForm 程序开发界面参数传递

    1. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; u ...

  8. C#类的成员初始化顺序

    首先我们来看看引用类型的成员初始化过程 我们来看一个例子吧 class Program {     static void Main(string[] args)     {         Driv ...

  9. C# Redis分布式缓存

    C# Redis实战(七) 七.修改数据 在上一篇 C# Redis实战(六)中介绍了如何查询Redis中数据,本篇将介绍如何修改Redis中相关数据.大家都知道Redis是key-value型存储系 ...

  10. D2 前端技术论坛总结(上)

    得幸获得D2前端技术论坛门票一张,今天就去了,公司还给批假了(有可能不会算做请假,哈哈). 早上8点50出门,骑个小毛驴,大概9点30分左右,到了阿里巴巴西溪园区,很多人,进去的门口有专人接待,看D2 ...