LoginSignup
39
45

More than 5 years have passed since last update.

WPFでChartコントロールを使う

Posted at

はじめに

環境は
Visual Studio Community 2013 @ Windows8.1
です。

WPFにChartコントロールないの!?

昨日あたりから「WPF使ったことないから弄ってみるかー」と思ったのですが、どうも
WPFにはChartコントロールが標準で用意されていないのでグラフを描きたい場合は、
ネット上などで公開されているライブラリを別途用意し、それを使用する必要があるようです。

しかし、既にメンテされてなかったり、ドキュメントがあるんだか ないんだか、機能的に十分でなかったり、
などの問題があり、どれ使ったらいいんだか分かりません・・・

てか、Windows FormではChartコントロールあるんだから、それ使えるんじゃないの??

使えました!

て、ことで備忘録
ほぼほぼ、ここのサンプル通りです。
違いはChartコントロールのインスタンス作成をXAMLの方に書いてある点です。

さて

ここでは、プロジェクト名をWpfChartDemoとします。
プロジェクトを作成したら、以下を参照設定に追加します
1. WindowsFormIntegration
2. System.Windows.Forms
3. 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);
        }
    }
}

以上です。

こんなん出ましたけど

snapshot-14-12-16-004324.png

39
45
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
45