はじめに
環境は
Visual Studio Community 2013 @ Windows8.1
です。
WPFにChartコントロールないの!?
昨日あたりから「WPF使ったことないから弄ってみるかー」と思ったのですが、どうも
WPFにはChartコントロールが標準で用意されていないのでグラフを描きたい場合は、
ネット上などで公開されているライブラリを別途用意し、それを使用する必要があるようです。
しかし、既にメンテされてなかったり、ドキュメントがあるんだか ないんだか、機能的に十分でなかったり、
などの問題があり、どれ使ったらいいんだか分かりません・・・
てか、Windows FormではChartコントロールあるんだから、それ使えるんじゃないの??
使えました!
て、ことで備忘録
ほぼほぼ、ここのサンプル通りです。
違いはChartコントロールのインスタンス作成をXAMLの方に書いてある点です。
さて
ここでは、プロジェクト名をWpfChartDemo
とします。
プロジェクトを作成したら、以下を参照設定に追加します
- WindowsFormIntegration
- System.Windows.Forms
- System.Windows.Forms.DataVisualization
MainWindow.xamlを以下のように編集します
MainWindow.xaml
<Window x:Class="WpfChartDemo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:wfc="clr-namespace:System.Windows.Forms.DataVisualization.Charting;assembly=System.Windows.Forms.DataVisualization"
Title="WPF Chart Demo" Width="431" Height="317">
<Grid Name="grid1">
<WindowsFormsHost>
<wfc:Chart Name="Chart1"/>
</WindowsFormsHost>
</Grid>
</Window>
MainWindow.xaml.csを以下のように編集します。
今回はSin波形とCos波形を描写してみます。
MainWindow.xaml.cs
namespace WpfChartDemo
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
var windowsFormsHost = (WindowsFormsHost)grid1.Children[0];
var chart = (Chart)windowsFormsHost.Child;
// ChartArea追加
chart.ChartAreas.Add("ChartArea1");
// Seriesの作成と値の追加
Series seriesSin = new Series();
seriesSin.ChartType = SeriesChartType.Line;
seriesSin.MarkerStyle = MarkerStyle.Circle;
Series seriesCos = new Series();
seriesCos.ChartType = SeriesChartType.Line;
seriesCos.MarkerStyle = MarkerStyle.Circle;
for (double x = 0; x <= 2 * Math.PI; x = x + 0.1)
{
seriesSin.Points.AddXY(x, Math.Sin(x));
seriesCos.Points.AddXY(x, Math.Cos(x));
}
chart.Series.Add(seriesSin);
chart.Series.Add(seriesCos);
}
}
}
以上です。