参考使用:
在WPF中使用WinForm控件方法
【ZedGraph】基础
首先添加两个dll文件:WindowsFormsIntegration.dll,System.Windows.Forms.dll。
2.添加ZedGraph.dll
在WPF中使用zedGraphControl
3.在WPF的XAML文件中代码如下:
<Window x:Class="WpfZedgraph.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/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"
Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">
<Grid HorizontalAlignment="Left" Height="322.4" VerticalAlignment="Top" Width="518.4">
<DataGrid HorizontalAlignment="Left" VerticalAlignment="Top" Height="322" Width="518"/>
<wfi:WindowsFormsHost Margin="10,35,21.4,10.4">
<zedgraph:ZedGraphControl x:Name="zedGraphControl" />
</wfi:WindowsFormsHost>
</Grid>
</Window>
说明: wfi:WindowsFormsHos </wfi:WindowsFormsHost>即为WinForm控件的宿主容器,每一个宿主容器只能放一个WinForm控件.
注意:如上我添加的WinForm控件如在指定其Name时,必须加前缀x:,如添加Lable时<wf:Label x:Name=“lblName” Text="我是WPF中的WinForm控件” />,否则后台代码无法访问。
PointPairList list2 = new PointPairList();
private void showChart1(double[] value)//数组value为形参showChart1给他赋值
{
double maxvalue = value[0];
for (int j = 0; j < value.Length; j++)
{
if (maxvalue < value[j])
{
maxvalue = value[j];
}
}
list2.Clear();//清空数组
zedGraphControl1.GraphPane.Title.Text = "Spectrogram";
zedGraphControl1.GraphPane.XAxis.Title.Text = "X";
zedGraphControl1.GraphPane.YAxis.Title.Text = "Y";
zedGraphControl1.GraphPane.XAxis.Scale.Min = 0; //X轴最小值0
zedGraphControl1.GraphPane.XAxis.Scale.Max = 520;
zedGraphControl1.GraphPane.XAxis.Scale.MinorStep = 10;
zedGraphControl1.GraphPane.XAxis.Scale.MajorStep = 1000;
zedGraphControl1.GraphPane.YAxis.Scale.Min = 0;
zedGraphControl1.GraphPane.YAxis.Scale.Max = maxvalue + 2000; //这里要改成动态的,大小随波形改变
zedGraphControl1.GraphPane.YAxis.Scale.MinorStep = 200;
zedGraphControl1.GraphPane.YAxis.Scale.MajorStep = 1000;
zedGraphControl1.AxisChange();
for (int j = 0; j < value.Length; j++)
list2.Add(j, value[j]);
this.Dispatcher.Invoke(RefreshInterface); //切换到UI线程更新界面,如果没有这句就不会出图
// RefreshInterface();
}
//刷新界面
private void RefreshInterface()
{
zedGraphControl1.GraphPane.CurveList.Clear();//这句话的意思是把曲线清零
zedGraphControl1.GraphPane.AddCurve("", list2, System.Drawing.Color.Red, SymbolType.None);//绘制图表
// zedGraphControl.AxisChange();//刷新界面
zedGraphControl1.Refresh();
}
一些代码解释
myPane.Title.FontSpec.Family = “宋体”;//设置字体样式
//清除X、Y轴对面的轴显示
zedGraphControl1.GraphPane.Chart.Border.IsVisible = false;//图表边框设置,边界,是否可见
zedGraphControl1.GraphPane.XAxis.MajorTic.IsOpposite = false;
zedGraphControl1.GraphPane.YAxis.MajorTic.IsOpposite = false;
zedGraphControl1.GraphPane.YAxis.MinorTic.IsOpposite = false;
zedGraphControl1.GraphPane.XAxis.MinorTic.IsOpposite = false;
zedGraphControl1.GraphPane.AddCurve(“1”, list1, Color.Red , SymbolType.Circle);// 1:曲线名称
zedGraphControl1.GraphPane.AddCurve(“2”, list2, Color.Blue, SymbolType.Diamond);// 2:曲线名称
遇到的问题:
注意这里的名字跟你调用的那个ZedGraph.dll在XAML中的名字一样。
在winForm中使用zedGraphControl
可以参考这位博主的篇文章,点击这里。