最近在C#下调用NPlot生成股票K线图,由于用的WPF框架,而NPlot是基于WinForm开发的。所以不能直接引用。具体做法如下: NPlot源码Microsoft .NET Framework 4.5版
1、引入DLL
创建工程后需要引入WindowsFormsIntegration.dll和System.Windows.Forms.dll两个Dll。WindowsFormsIntegration.dll负责整合WPF和Windows。
2、在xaml中添加命名空间标签
xmlns
:
WinFormIntegration
="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"
3、添加宿主容器
<
WinFormIntegration
:
WindowsFormsHost
x
:
Name
="winFormsHost"
Grid.Row
="1"
Width
="Auto"
Grid.ColumnSpan
="2">
<!--在此添加WinForm控件-->
</
WinFormIntegration
:
WindowsFormsHost
>
本例完整的xaml文件:
<
Window
x
:
Class
="AxyDeal.MainWindow"
Title
="MainWindow"
Height
="600"
Width
="1080"
xmlns
:
local
="clr-namespace:AxyDeal.comcontrol"
xmlns
:
WinFormIntegration
="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"
>
<
Grid
>
<
DockPanel
>
<
Menu
DockPanel.Dock
="Top">
<
MenuItem
Header
="文件">
<
MenuItem
Header
="打开">
<
MenuItem
Header
="1.txt"></
MenuItem
>
<
MenuItem
Header
="2.txt"></
MenuItem
>
<
MenuItem
Header
="3.txt"></
MenuItem
>
</
MenuItem
>
<
MenuItem
Header
="退出"
Name
="miExit"
Click
="miExit_Click"></
MenuItem
>
</
MenuItem
>
<
MenuItem
Header
="编辑">
<
MenuItem
Header
="复制"></
MenuItem
>
<
MenuItem
Header
="粘贴"></
MenuItem
>
</
MenuItem
>
</
Menu
>
<
ToolBar
DockPanel.Dock
="Top"
Height
="40">
<
Button
>
<
Image
Source
="images/logo_email.png"></
Image
>
</
Button
>
<
Button
>
<
Image
Source
="images/logo_dropbox.png"></
Image
>
</
Button
>
<
Button
>
<
Image
Source
="images/logo_evernote.png"></
Image
>
</
Button
>
</
ToolBar
>
<
TabControl
DockPanel.Dock
="Left" >
<
TabItem
Header
="TabItem">
<
Grid
Background
="#FFE5E5E5"/>
</
TabItem
>
<
TabItem
Header
="TabItem">
<
Grid
Background
="#FFE5E5E5"/>
</
TabItem
>
</
TabControl
>
<
Grid
Height
="Auto"
Width
="Auto"
Background
="AliceBlue">
<
Grid.RowDefinitions
>
<
RowDefinition
Height
="Auto"></
RowDefinition
>
<
RowDefinition
></
RowDefinition
>
</
Grid.RowDefinitions
>
<
Grid.ColumnDefinitions
>
<
ColumnDefinition
></
ColumnDefinition
>
<
ColumnDefinition
></
ColumnDefinition
>
</
Grid.ColumnDefinitions
>
<
local
:
TickerControl
x
:
Name
="tickerControl"
Grid.Row
="0"
Height
="50"
Grid.ColumnSpan
="2"
Grid.RowSpan
="1"
Width
="686"
VerticalAlignment
="Top"
HorizontalAlignment
="Center"
Visibility
="Visible"
Margin
="1,0,0,0" ></
local
:
TickerControl
>
<
WinFormIntegration
:
WindowsFormsHost
x
:
Name
="winFormsHost"
Grid.Row
="1"
Width
="Auto"
Grid.ColumnSpan
="2">
<!--在此添加WinForm控件-->
</
WinFormIntegration
:
WindowsFormsHost
>
</
Grid
>
</
DockPanel
>
</
Grid
>
</
Window
>
4、在代码中引入WinForm控件
这里声明了两个要引入的变量
//Form实例
private Form kLineForm = new Form();
//要引入的NPlot控件
private NPlot.Windows.PlotSurface2D KLinePS;
然后在MainWindow方法中添加:
//把Form添加的xaml中创建的宿主容器
this.winFormsHost.Child = this.kLineForm;
KLinePS = new NPlot.Windows.PlotSurface2D();
//把NPlot控件添加的Form中
this.kLineForm.Controls.Add(this.KLinePS);
至此可以在WPF中任意使用NPlot了。
使用NPlot是一款免费又开源的.Net平台下的图表控件,能做各种曲线图,柱状图,饼图,散点图,股票图等。