Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

はじめに

環境は
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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away