在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#语言基础 → c# wpf常见线性图表示例下载(line charts)

c# wpf常见线性图表示例下载(line charts)

C#语言基础

下载此实例
  • 开发语言:C#
  • 实例大小:0.09M
  • 下载次数:60
  • 浏览次数:571
  • 发布时间:2017-07-25
  • 实例类别:C#语言基础
  • 发 布 人:logisticssong
  • 文件格式:.7z
  • 所需积分:2
 相关标签: wpf chart t cha Charts C#

实例介绍

【实例简介】

【实例截图】

from clipboard


from clipboard


from clipboard


from clipboard


【核心代码】

using System;
using System.Windows;
using System.Collections.Generic;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Shapes;

namespace LineCharts
{
    public partial class LineChartControl : UserControl
    {
        private ChartStyleLineChartControl controlChartStyle;
        private DataCollectionLineChartControl controlDataCollection;
        private DataSeriesLineChartControl controlDataSeries;
        
        public LineChartControl()
        {
            InitializeComponent();
            this.DataContext = this;
            this.controlChartStyle = new ChartStyleLineChartControl(this);
            this.controlDataCollection = new DataCollectionLineChartControl(this);
            this.controlDataSeries = new DataSeriesLineChartControl();
        }

        public ChartStyleLineChartControl ControlChartStyle
        {
            get { return controlChartStyle; }
            set { controlChartStyle = value; }
        }

        public DataCollectionLineChartControl ControlDataCollection
        {
            get { return controlDataCollection; }
            set { controlDataCollection = value; }
        }

        public DataSeriesLineChartControl ControlDataSeries
        {
            get { return controlDataSeries; }
            set { controlDataSeries = value; }
        }

        public static DependencyProperty XminProperty = DependencyProperty.Register(
            "Xmin", typeof(double), typeof(LineChartControl), new FrameworkPropertyMetadata(0.0,
                new PropertyChangedCallback(OnDoubleChanged)));
        public double Xmin
        {
            get { return (double)GetValue(XminProperty); }
            set { SetValue(XminProperty, value); }
        }

        public static DependencyProperty XmaxProperty = DependencyProperty.Register(
            "Xmax", typeof(double), typeof(LineChartControl), new FrameworkPropertyMetadata(1.0,
                new PropertyChangedCallback(OnDoubleChanged)));
        public double Xmax
        {
            get { return (double)GetValue(XmaxProperty); }
            set { SetValue(XmaxProperty, value); }
        }

        public static DependencyProperty YminProperty = DependencyProperty.Register(
           "Ymin", typeof(double), typeof(LineChartControl), new FrameworkPropertyMetadata(0.0,
               new PropertyChangedCallback(OnDoubleChanged)));
        public double Ymin
        {
            get { return (double)GetValue(YminProperty); }
            set { SetValue(YminProperty, value); }
        }

        public static DependencyProperty YmaxProperty = DependencyProperty.Register(
            "Ymax", typeof(double), typeof(LineChartControl), new FrameworkPropertyMetadata(1.0,
                new PropertyChangedCallback(OnDoubleChanged)));
        public double Ymax
        {
            get { return (double)GetValue(YmaxProperty); }
            set { SetValue(YmaxProperty, value); }
        }

        public static DependencyProperty XTickProperty = DependencyProperty.Register(
           "XTick", typeof(double), typeof(LineChartControl), new FrameworkPropertyMetadata(0.5,
               new PropertyChangedCallback(OnDoubleChanged)));
        public double XTick
        {
            get { return (double)GetValue(XTickProperty); }
            set { SetValue(XTickProperty, value); }
        }

        public static DependencyProperty YTickProperty = DependencyProperty.Register(
           "YTick", typeof(double), typeof(LineChartControl), new FrameworkPropertyMetadata(0.5,
               new PropertyChangedCallback(OnDoubleChanged)));
        public double YTick
        {
            get { return (double)GetValue(YTickProperty); }
            set { SetValue(YTickProperty, value); }
        }

        public static DependencyProperty TitleProperty = DependencyProperty.Register(
            "Title", typeof(string), typeof(LineChartControl), new FrameworkPropertyMetadata("My Chart",
                new PropertyChangedCallback(OnStringChanged)));
        public string Title
        {
            get { return (string)GetValue(TitleProperty); }
            set { SetValue(TitleProperty, value); }
        }

        public static DependencyProperty XLabelProperty = DependencyProperty.Register(
           "XLabel", typeof(string), typeof(LineChartControl), new FrameworkPropertyMetadata("X Axis",
               new PropertyChangedCallback(OnStringChanged)));
        public string XLabel
        {
            get { return (string)GetValue(XLabelProperty); }
            set { SetValue(XLabelProperty, value); }
        }

        public static DependencyProperty YLabelProperty = DependencyProperty.Register(
           "YLabel", typeof(string), typeof(LineChartControl), new FrameworkPropertyMetadata("Y Axis",
               new PropertyChangedCallback(OnStringChanged)));
        public string YLabel
        {
            get { return (string)GetValue(YLabelProperty); }
            set { SetValue(YLabelProperty, value); }
        }

        public static DependencyProperty IsXGridProperty = DependencyProperty.Register(
           "IsXGrid", typeof(bool), typeof(LineChartControl), new FrameworkPropertyMetadata(true,
               new PropertyChangedCallback(OnBoolChanged)));
        public bool IsXGrid
        {
            get { return (bool)GetValue(IsXGridProperty); }
            set { SetValue(IsXGridProperty, value); }
        }

        public static DependencyProperty IsYGridProperty = DependencyProperty.Register(
           "IsYGrid", typeof(bool), typeof(LineChartControl), new FrameworkPropertyMetadata(true,
               new PropertyChangedCallback(OnBoolChanged)));
        public bool IsYGrid
        {
            get { return (bool)GetValue(IsYGridProperty); }
            set { SetValue(IsYGridProperty, value); }
        }

        public static DependencyProperty GridlineColorProperty = DependencyProperty.Register(
          "GridlineColor", typeof(Brush), typeof(LineChartControl), new FrameworkPropertyMetadata(Brushes.Gray,
          new PropertyChangedCallback(OnColorChanged)));
        public Brush GridlineColor
        {
            get { return (Brush)GetValue(GridlineColorProperty); }
            set { SetValue(GridlineColorProperty, value); }
        }
        
        public static DependencyProperty GridlinePatternProperty = DependencyProperty.Register(
            "GridLinePattern", typeof(ChartStyleLineChartControl.GridlinePatternEnum), 
            typeof(LineChartControl), new FrameworkPropertyMetadata(
            ChartStyleLineChartControl.GridlinePatternEnum.Solid,
            new PropertyChangedCallback(OnGridlinePatternChanged)));
        public ChartStyleLineChartControl.GridlinePatternEnum GridlinePattern
        {
            get { return (ChartStyleLineChartControl.GridlinePatternEnum)GetValue(GridlinePatternProperty); }
            set { SetValue(GridlinePatternProperty, value); }
        }

        private static void OnGridlinePatternChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
        {
            LineChartControl lcc = (LineChartControl)sender;
            lcc.GridlinePattern = (ChartStyleLineChartControl.GridlinePatternEnum)e.NewValue;
        }
        
        private static void OnColorChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
        {
            LineChartControl lcc = (LineChartControl)sender;
            lcc.GridlineColor = (Brush)e.NewValue;
        }

        private static void OnDoubleChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
        {  
            LineChartControl lcc = (LineChartControl)sender;
            if (e.Property == XminProperty)
                lcc.Xmin = (double)e.NewValue;
            else if (e.Property == XmaxProperty)
                lcc.Xmax = (double)e.NewValue;
            else if (e.Property == YminProperty)
                lcc.Ymin = (double)e.NewValue;
            else if (e.Property == YmaxProperty)
                lcc.Ymax = (double)e.NewValue;
            else if (e.Property == XTickProperty)
                lcc.XTick = (double)e.NewValue;
            else if (e.Property == YTickProperty)
                lcc.YTick = (double)e.NewValue;
        }

        private static void OnStringChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
        {
            LineChartControl lcc = (LineChartControl)sender;
            if (e.Property == TitleProperty)
            {
                lcc.Title = (string)e.NewValue;
            }
            else if (e.Property == XLabelProperty)
            {
                lcc.XLabel = (string)e.NewValue;
            }
            else if (e.Property == YLabelProperty)
            {
                lcc.YLabel = (string)e.NewValue;
            }
        }

        private static void OnBoolChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
        {
            LineChartControl lcc = (LineChartControl)sender;
            if (e.Property == IsXGridProperty)
                lcc.IsXGrid = (bool)e.NewValue;
            else if (e.Property == IsYGridProperty)
                lcc.IsYGrid = (bool)e.NewValue;
        }

    }

    public class ChartStyleLineChartControl
    {
        private double Xmin;
        private double Xmax;
        private double Ymin;
        private double Ymax;
        private string Title;
        private string XLabel;
        private string YLabel;
        private double XTick;
        private double YTick;
        private bool IsXGrid;
        private bool IsYGrid;

        private Brush GridlineColor;
        private GridlinePatternEnum GridlinePattern;

        private double leftOffset = 20;
        private double bottomOffset = 15;
        private double rightOffset = 10;
        private Line gridline = new Line();
        private LineChartControl lcc;
        private Canvas TextCanvas;
        private Canvas ChartCanvas;

        public ChartStyleLineChartControl(LineChartControl lcc)
        {
            this.lcc = lcc;
            TextCanvas = lcc.textCanvas;
            ChartCanvas = lcc.chartCanvas;
            UpdateChartStyle();           
        }

        public void UpdateChartStyle()
        {
            Xmin = lcc.Xmin;
            Xmax = lcc.Xmax;
            Ymin = lcc.Ymin;
            Ymax = lcc.Ymax;
            XTick = lcc.XTick;
            YTick = lcc.YTick;
            Title = lcc.Title;
            XLabel = lcc.XLabel;
            YLabel = lcc.YLabel;
            IsXGrid = lcc.IsXGrid;
            IsYGrid = lcc.IsYGrid;
            GridlineColor = lcc.GridlineColor;
            GridlinePattern = lcc.GridlinePattern;
        }
       
        public void AddChartStyle()
        {
            UpdateChartStyle();

            Point pt = new Point();
            Line tick = new Line();
            double offset = 0;
            double dx, dy;
            TextBlock tb = new TextBlock();

            //  determine right offset:
            tb.Text = Xmax.ToString();
            tb.Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity));
            Size size = tb.DesiredSize;
            rightOffset = size.Width / 2   2;

            // Determine left offset:
            for (dy = Ymin; dy <= Ymax; dy  = YTick)
            {
                pt = NormalizePoint(new Point(Xmin, dy));
                tb = new TextBlock();
                tb.Text = dy.ToString();
                tb.TextAlignment = TextAlignment.Right;
                tb.Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity));
                size = tb.DesiredSize;
                if (offset < size.Width)
                    offset = size.Width;
            }
            leftOffset = offset   5;

            Canvas.SetLeft(ChartCanvas, leftOffset);
            Canvas.SetBottom(ChartCanvas, bottomOffset);
            ChartCanvas.Width = TextCanvas.Width - leftOffset - rightOffset;
            ChartCanvas.Height = TextCanvas.Height - bottomOffset - size.Height / 2;
            Rectangle chartRect = new Rectangle();
            chartRect.Stroke = Brushes.Black;
            chartRect.Width = ChartCanvas.Width;
            chartRect.Height = ChartCanvas.Height;
            ChartCanvas.Children.Add(chartRect);

            // Create vertical gridlines:
            if (IsYGrid == true)
            {
                for (dx = Xmin   XTick; dx < Xmax; dx  = XTick)
                {
                    gridline = new Line();
                    AddLinePattern();
                    gridline.X1 = NormalizePoint(new Point(dx, Ymin)).X;
                    gridline.Y1 = NormalizePoint(new Point(dx, Ymin)).Y;
                    gridline.X2 = NormalizePoint(new Point(dx, Ymax)).X;
                    gridline.Y2 = NormalizePoint(new Point(dx, Ymax)).Y;
                    ChartCanvas.Children.Add(gridline);
                }
            }

            // Create horizontal gridlines:
            if (IsXGrid == true)
            {
                for (dy = Ymin   YTick; dy < Ymax; dy  = YTick)
                {
                    gridline = new Line();
                    AddLinePattern();
                    gridline.X1 = NormalizePoint(new Point(Xmin, dy)).X;
                    gridline.Y1 = NormalizePoint(new Point(Xmin, dy)).Y;
                    gridline.X2 = NormalizePoint(new Point(Xmax, dy)).X;
                    gridline.Y2 = NormalizePoint(new Point(Xmax, dy)).Y;
                    ChartCanvas.Children.Add(gridline);
                }
            }

            // Create x-axis tick marks:
            for (dx = Xmin; dx <= Xmax; dx  = XTick)
            {
                pt = NormalizePoint(new Point(dx, Ymin));
                tick = new Line();
                tick.Stroke = Brushes.Black;
                tick.X1 = pt.X;
                tick.Y1 = pt.Y;
                tick.X2 = pt.X;
                tick.Y2 = pt.Y - 5;
                ChartCanvas.Children.Add(tick);

                tb = new TextBlock();
                tb.Text = dx.ToString();
                tb.Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity));
                size = tb.DesiredSize;
                TextCanvas.Children.Add(tb);
                Canvas.SetLeft(tb, leftOffset   pt.X - size.Width / 2);
                Canvas.SetTop(tb, pt.Y   2   size.Height / 2);
            }

            // Create y-axis tick marks:
            for (dy = Ymin; dy <= Ymax; dy  = YTick)
            {
                pt = NormalizePoint(new Point(Xmin, dy));
                tick = new Line();
                tick.Stroke = Brushes.Black;
                tick.X1 = pt.X;
                tick.Y1 = pt.Y;
                tick.X2 = pt.X   5;
                tick.Y2 = pt.Y;
                ChartCanvas.Children.Add(tick);

                tb = new TextBlock();
                tb.Text = dy.ToString();
                tb.Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity));
                size = tb.DesiredSize;
                TextCanvas.Children.Add(tb);
                Canvas.SetRight(tb, ChartCanvas.Width   10);
                Canvas.SetTop(tb, pt.Y);
            }
        }

        public void AddLinePattern()
        {
            gridline.Stroke = GridlineColor;
            gridline.StrokeThickness = 1;

            switch (GridlinePattern)
            {
                case GridlinePatternEnum.Dash:
                    gridline.StrokeDashArray = new DoubleCollection(new double[2] { 4, 3 });
                    break;
                case GridlinePatternEnum.Dot:
                    gridline.StrokeDashArray = new DoubleCollection(new double[2] { 1, 2 });
                    break;
                case GridlinePatternEnum.DashDot:
                    gridline.StrokeDashArray = new DoubleCollection(new double[4] { 4, 2, 1, 2 });
                    break;
            }
        }

        public Point NormalizePoint(Point pt)
        {
            if (ChartCanvas.Width.ToString() == "NaN")
                ChartCanvas.Width = 270;
            if (ChartCanvas.Height.ToString() == "NaN")
                ChartCanvas.Height = 250;
            Point result = new Point();
            result.X = (pt.X - Xmin) * ChartCanvas.Width / (Xmax - Xmin);
            result.Y = ChartCanvas.Height - (pt.Y - Ymin) * ChartCanvas.Height / (Ymax - Ymin);
            return result;
        }

        public enum GridlinePatternEnum
        {
            Solid = 1,
            Dash = 2,
            Dot = 3,
            DashDot = 4
        }
    }

    public class DataSeriesLineChartControl
    {
        private Polyline lineSeries = new Polyline();
        private Brush lineColor;
        private double lineThickness = 1;
        private LinePatternEnum linePattern;
        private string seriesName = "Default Name";

        public DataSeriesLineChartControl()
        {
            LineColor = Brushes.Black;
        }

        public Brush LineColor
        {
            get { return lineColor; }
            set { lineColor = value; }
        }

        public Polyline LineSeries
        {
            get { return lineSeries; }
            set { lineSeries = value; }
        }

        public double LineThickness
        {
            get { return lineThickness; }
            set { lineThickness = value; }
        }

        public LinePatternEnum LinePattern
        {
            get { return linePattern; }
            set { linePattern = value; }
        }

        public string SeriesName
        {
            get { return seriesName; }
            set { seriesName = value; }
        }

        public void AddLinePattern()
        {
            LineSeries.Stroke = LineColor;
            LineSeries.StrokeThickness = LineThickness;

            switch (LinePattern)
            {
                case LinePatternEnum.Dash:
                    LineSeries.StrokeDashArray = new DoubleCollection(new double[2] { 4, 3 });
                    break;
                case LinePatternEnum.Dot:
                    LineSeries.StrokeDashArray = new DoubleCollection(new double[2] { 1, 2 });
                    break;
                case LinePatternEnum.DashDot:
                    LineSeries.StrokeDashArray = new DoubleCollection(new double[4] { 4, 2, 1, 2 });
                    break;
                case LinePatternEnum.None:
                    LineSeries.Stroke = Brushes.Transparent;
                    break;
            }
        }

        public enum LinePatternEnum
        {
            Solid = 1,
            Dash = 2,
            Dot = 3,
            DashDot = 4,
            None = 5
        }
    }

    public class DataCollectionLineChartControl
    {
        private List<DataSeriesLineChartControl> dataList;
        private LineChartControl lcc;
        private ChartStyleLineChartControl cs;

        public DataCollectionLineChartControl(LineChartControl lcc)
        {
            dataList = new List<DataSeriesLineChartControl>();
            this.lcc = lcc;
            this.cs = lcc.ControlChartStyle;
        }

        public List<DataSeriesLineChartControl> DataList
        {
            get { return dataList; }
            set { dataList = value; }
        }

        public void AddLines()
        {
            lcc.ControlChartStyle.AddChartStyle();
            int j = 0;
            foreach (DataSeriesLineChartControl ds in DataList)
            {
                if (ds.SeriesName == "Default Name")
                {
                    ds.SeriesName = "DataSeries"   j.ToString();
                }
                ds.AddLinePattern();
                for (int i = 0; i < ds.LineSeries.Points.Count; i  )
                {
                    ds.LineSeries.Points[i] = cs.NormalizePoint(ds.LineSeries.Points[i]);
                }
                lcc.chartCanvas.Children.Add(ds.LineSeries);
                j  ;
            }
        }
    }
}

标签: wpf chart t cha Charts C#

实例下载地址

c# wpf常见线性图表示例下载(line charts)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警