如何在.NET Core WPF项目中复用基于ZedGraph的旧WinForms代码?
.NET Core WPF项目迁移CIE色度图方案
一、保留普朗克轨迹数据的旧代码
当然能复用这部分代码——普朗克轨迹数据属于纯计算逻辑,和WinForms、ZedGraph这些UI框架完全无关:
- 把这部分代码单独抽成类库项目(选.NET Standard 2.0或者.NET Core 3.0+版本),.NET Core WPF项目直接引用这个类库就行。
- 如果原代码和ZedGraph的绘图逻辑绑在一起,只需要提取数据生成、轨迹点计算的部分,把ZedGraph的API调用删掉就行。
二、.NET Core WPF中用ZedGraph的方法
官方ZedGraph确实停更且不支持.NET Core,但有社区做的移植版:
- 去NuGet搜
ZedGraph.NETCore包(注意选下载量高、维护活跃的版本),这是适配.NET Core的WinForms版本。 - .NET Core 3.0及以上已经支持
WindowsFormsHost了,步骤如下:- 给WPF项目装
WindowsFormsIntegrationNuGet包。 - XAML里加命名空间:
xmlns:wfi="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration" xmlns:zed="clr-namespace:ZedGraph;assembly=ZedGraph.NETCore" - 用
WindowsFormsHost包裹ZedGraph的控件:<wfi:WindowsFormsHost> <zed:GraphControl x:Name="zedGraph" /> </wfi:WindowsFormsHost> - 后台代码里调用提取好的普朗克轨迹数据,用ZedGraph的API画图就行。
- 给WPF项目装
三、替代ZedGraph的.NET Core WPF方案
不想碰ZedGraph的话,这几个方案更适配:
1. OxyPlot
开源跨平台,支持WPF等多种框架,完全兼容.NET Core/.NET 5+:
- 用
PlotView控件,把普朗克轨迹数据转成OxyPlot的DataPoint集合,加到图表系列里就行。 - 示例代码:
var plotModel = new PlotModel { Title = "CIE 色度图" }; var planckSeries = new LineSeries { Title = "普朗克轨迹" }; foreach (var point in 你的轨迹点集合) { planckSeries.Points.Add(new DataPoint(point.X, point.Y)); } plotModel.Series.Add(planckSeries); plotView.Model = plotModel;
2. LiveCharts2
现代交互式图表库,支持WPF和.NET Core,自带缩放、tooltip等交互功能:
- 把轨迹数据转成
ObservablePoint集合,绑定到LineSeries就能渲染。
3. 纯WPF自定义绘图
如果图表逻辑不复杂,直接用WPF自带的Canvas、Path控件画:
- 把CIE色度图的轮廓、普朗克轨迹的坐标转成WPF的
PathGeometry,在XAML或后台代码里渲染就行。这种方式完全不用第三方库,灵活度最高,但得自己处理坐标转换。
内容的提问来源于stack exchange,提问作者Martin Hung
相关产品推荐
相关产品推荐

