下面以在
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
>
转载于:https://www.cnblogs.com/liancs/archive/2011/05/12/3879317.html