打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
[转载]WPF中的Chart画图的功能。

[转载]WPF中的Chart画图的功能。

(2012-05-18 15:01:02)
标签:

转载



引用DLL如图片。。

---------------------------后台代码为:-----------------------

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Windows.Controls.DataVisualization.Charting;
using System.Data;
using System.Collections;

namespace RibbonPad
{
    ///<summary>
    ///WPF_ToolKit.xaml 的交互逻辑
    ///</summary>
    publicpartial class WPF_ToolKit : Window
    {
       public WPF_ToolKit()
       {
           InitializeComponent();
       }

       private void Window_Loaded(object sender, RoutedEventArgs e)
       {
           ((ColumnSeries)this.mcChart.Series[0]).ItemsSource = newKeyValuePair<int, int>[]{
               newKeyValuePair<int,int>(1,400),
               newKeyValuePair<int,int>(2,200),
               newKeyValuePair<int,int>(3,300),
               newKeyValuePair<int,int>(4,320),
               newKeyValuePair<int,int>(5,150)
           };
           ((AreaSeries)this.mcChart.Series[1]).ItemsSource = newKeyValuePair<int, int>[]{
               newKeyValuePair<int,int>(1,400),
               newKeyValuePair<int,int>(2,200),
               newKeyValuePair<int,int>(3,300),
               newKeyValuePair<int,int>(4,320),
               newKeyValuePair<int,int>(5,150)
           };

           //------------------------------------------------------
           DataTable dt = new DataTable();
           dt.Columns.Add("1");
           dt.Columns.Add("2");
           dt.Columns.Add("3");
           dt.Columns.Add("4");
           dt.Columns.Add("5");
           dt.Columns.Add("6");
           Random rand = new Random();
           for (int i = 0; i < 10; i++)
           {
               DataRow newRow = dt.NewRow();
               for (int j = 0; j < dt.Columns.Count; j++)
               {
                   newRow[j] = rand.Next(300);
               }
               dt.Rows.Add(newRow);
           }
           Chart chart = new CreateToolKit(300, 250).GetNewChart(dt,GraphEnum.Area);
           Canvas.SetLeft(chart, 200);
           Canvas.SetTop(chart, 200);
           this.CanChart.Children.Add(chart);
       }

       /// <summary>
       /// 绘制图形枚举。
       /// </summary>
       public enum GraphEnum
       {
           /// <summary>
           /// 区域图形。
           /// </summary>
           Area,
           /// <summary>
           /// 条形图形。
           /// </summary>
           Bar,
           /// <summary>
           /// 气泡图形。
           /// </summary>
           Bubble,
           /// <summary>
           /// 柱图形。
           /// </summary>
           Column,
           /// <summary>
           /// 线图形。
           /// </summary>
           Line,
           /// <summary>
           /// 饼图形。
           /// </summary>
           Pie,
           /// <summary>
           /// 散点图形
           /// </summary>
           Scatter,
       }

       /// <summary>
       /// DataGrid数据生成图形信息操作类。
       /// </summary>
       public class CreateToolKit
       {
           /// <summary>
           /// Chart的基本宽度。
           /// </summary>
           private double KitWitdth = 0;
           /// <summary>
           /// Chart的基本高度。
           /// </summary>
           private double KitHeight = 0;
           /// <summary>
           /// 绘制图表类。
           /// </summary>
           public Chart newChart = null;

           /// <summary>
           /// 设置图形表的基本属性内容。
           /// </summary>
           /// <paramname="width"></param>
           /// <paramname="height"></param>
           public CreateToolKit(double width, double height)
           {
               this.KitHeight = height;
               this.KitWitdth = width;
               this.newChart = new Chart();
               this.newChart.Width = this.KitWitdth;
               this.newChart.Height = this.KitHeight;
               this.newChart.LegendTitle = null;
               this.newChart.Background = Brushes.Azure;
           }

           #region================实现方法=====================
           /// <summary>
           /// 生成指定图形的表。
           /// </summary>
           /// <paramname="table">表数据。</param>
           /// <paramname="graph">绘制图形类型。</param>
           ///<returns></returns>
           public Chart GetNewChart(DataTable table, GraphEnum graph)
           {
               try
               {
                   switch (graph)
                   {
                       case GraphEnum.Area:
                           newChart.Series.Add(SetDrawData<AreaSeries>(table));
                           break;
                       case GraphEnum.Bar:
                           newChart.Series.Add(SetDrawData<BarSeries>(table));
                           break;
                       case GraphEnum.Bubble:
                           newChart.Series.Add(SetDrawData<BubbleSeries>(table));
                           break;
                       case GraphEnum.Column:
                           newChart.Series.Add(SetDrawData<ColumnSeries>(table));
                           break;
                       case GraphEnum.Line:
                           newChart.Series.Add(SetDrawData<LineSeries>(table));
                           break;
                       case GraphEnum.Pie:
                           newChart.Series.Add(SetDrawData<PieSeries>(table));
                           break;
                       case GraphEnum.Scatter:
                           newChart.Series.Add(SetDrawData<ScatterSeries>(table));
                           break;
                   }
                   return newChart;
               }
               catch (Exception TableEx)
               {
                   //错误是计算的数值有非数字时,就可能出错,返回空值!    
                   return null;
               }
           }
           /// <summary>
           /// 对图形进行值的添加。
           /// </summary>
           /// <paramname="table">数据源。</param>
           ///<returns>图形对象。</returns>
           private T SetDrawData<T>(DataTabletable) where T : new()
           {
               Binding KeyBind = new Binding("Key");
               Binding ValueBind = new Binding("Value");
               T ret = new T();
               Type obj = ret.GetType();
               obj.GetProperty("Title").SetValue(ret, "Example", null);
               obj.GetProperty("IndependentValueBinding").SetValue(ret, KeyBind,null);
               obj.GetProperty("DependentValueBinding").SetValue(ret, ValueBind,null);
               obj.GetProperty("ItemsSource").SetValue(ret, GetTableData(table),null);
               return ret;
           }
           /// <summary>
           /// 对数据进行标准转换,转成图形能加载的形式。
           /// 【DataTable转换成Dictionary】,是按列的统计来添加数据。
           /// </summary>
           /// <paramname="table">DataTable数据源。</param>
           ///<returns></returns>
           private Dictionary<int, double>GetTableData(DataTable table)
           {
               Dictionary<int, double> ReDict = newDictionary<int, double>();
               int i = 1;
               foreach (DataColumn col in table.Columns)
               {
                   double tempDouble = 0;
                   foreach (DataRow row in table.Rows)
                   {
                       if (!string.IsNullOrEmpty(row[col.ColumnName].ToString()))
                           tempDouble += Convert.ToDouble(row[col.ColumnName]);
                   }
                   ReDict.Add(i, tempDouble);
                   i += 1;
               }
               return ReDict;
           }
           #endregion
       }
    }
}
----------------------------------XAML代码为:----------------------------------------------------

<Window x:Class="RibbonPad.WPF_ToolKit"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   xmlns:dc="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit"
   Title="WPF_ToolKit" Height="300" Width="300"Loaded="Window_Loaded">
   <Canvas Name="CanChart">
       <Grid Name="GridChart">
           <dc:Chart Name="mcChart" Width="300" Height="250"Background="LightSteelBlue">
               <dc:Chart.Series>
                   <dc:ColumnSeries Title="Column"IndependentValueBinding="{Binding Path=Key}"DependentValueBinding="{Binding Path=Value}"/>
                   <dc:AreaSeries Title="Column"IndependentValueBinding="{Binding Path=Key}"DependentValueBinding="{Binding Path=Value}"/>
               </dc:Chart.Series>
           </dc:Chart>
       </Grid>
   </Canvas>
</Window>

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C# chart控件多个ChartArea
WPF开发学生信息管理系统【WPF+Prism+MAH+WebApi】(二)
《Head First C#》外星人入侵WPF编写源码
C# WPF如何关闭通过父窗口打开的所有子窗口
WPF 下无边框窗体改变大小和移动
WinForm控件与WPF控件的交互
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服