原因:

前段时间,公司项目中用到Visifire.Charts4.5.6控件,项目中要求随时可以控制动画效果,用于在大屏上面展示,很酷炫。

过程:

但是没有源码,于是写了一个方法用动画去控制数量动态增长,无奈效率太低,多实例几个Chart就卡到爆,放弃。

没有源码,怎么办呢,无奈之下反编译了一下dll,刚开始用reflector反编译,发现编译出来的大部分都用不了。然后又用ILSpy反编译,生成的代码还是有错误,但是已然少很多,于是稍加改动,就可以通过编译了。

反编译出来的代码能运行,就成功一大半了,然后花了大半月时间调试源码,添加动态控制动画方法,控制动画的时间,最终成功,后面有效果和Demo。

动画功能完成了,但反编译出来的代码还是有一些问题,这种反编译出来有些符号识别不了导致运行出来的图表总是多出来一条线。这个对于强迫症的我来说很难受啊,于是又花了好几天功夫调试啊,各种方法使尽啊就是找不到问题所在,最后又拿出Visifire.Charts3.6.1的源码来一个一个对比差异,这两个版本差异较大,一时半会没弄出来,最后还是无意间发现反编译将i++调用了多次导致,修改之后,完全正确了,喜出望外啊,强迫症解决了,完美。

诞生:

为了区别原来的Visifire.Charts4.5.6,我将封装了动画控制,新编译出来的代码修改为了WPFVisifire.Charts4.6.1。

说了这么多,贴一些使用代码吧,后面附加Visifire.Charts3.6.1、Visifire.Charts4.5.6、WPFVisifire.Charts4.6.1

示例:

XAML:

<Window x:Class="VisifireDemo.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:vc="clr-namespace:Visifire.Charts;assembly=WPFVisifire.Charts"Title="MainWindow" Height="600" Width="800" WindowStartupLocation="CenterScreen" Loaded="Window_Loaded"><Grid x:Name="grid" Background="#1E1E1E"><Grid.RowDefinitions><RowDefinition Height="50"/><RowDefinition/></Grid.RowDefinitions><WrapPanel x:Name="wrap" VerticalAlignment="Center"><ComboBox x:Name="cbChartType" Width="120" Height="40" SelectionChanged="cbChartType_SelectionChanged"/><Button x:Name="btnChartSet" Width="100" Height="40" Content="图形设置" Click="btnChartSet_Click"/><Button x:Name="btnTagSet" Width="100" Height="40" Content="标签设置" Click="btnTagSet_Click"/><Button x:Name="btnRandomValue" Width="100" Height="40" Content="随机值" Click="btnRandomValue_Click"/><Button x:Name="btnAnimated" Width="100" Height="40" Content="动画" Click="btnAnimated_Click"/>            </WrapPanel><vc:Chart x:Name="chart" Grid.Row="1"/></Grid>
</Window>

后代代码: 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Forms;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Visifire.Charts;namespace VisifireDemo
{/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{private Axis NewAxis(){var axisLabels = new AxisLabels();axisLabels.FontColor = Brushes.White;var _axis = new Axis { AxisLabels = axisLabels };_axis.Grids.Add(new ChartGrid());return _axis;}/// <summary>/// 初始化图表控件/// </summary>private void InitChart(){this.chart.BorderBrush = Brushes.Transparent;this.chart.Background = Brushes.Transparent;this.chart.LightingEnabled = false;this.chart.ThemeEnabled = false;this.chart.ShadowEnabled = false;this.chart.View3D = true;this.chart.AnimationEnabled = true;//加载动画this.chart.AnimatedUpdate = true;//更新动画this.chart.AnimationDuration = 5.0;//动画时长var _axisX = NewAxis();var _axisY = NewAxis();_axisY.Suffix = "斤";_axisY.AxisMaximum = 200;_axisY.AxisMinimum = 0;this.chart.AxesX.Add(_axisX);this.chart.AxesY.Add(_axisY);this.chart.PlotArea = new PlotArea(){Background = Brushes.Transparent,ShadowEnabled = false};}/// <summary>/// 绑定数据/// </summary>private void BindingData(){this.chart.Series.Clear();this.chart.Titles.Clear();this.chart.Titles.Add(new Title() { Text = "标题", FontColor = Brushes.Tomato, FontSize = 14 });DataSeries dataSeries = new DataSeries();DataPointCollection list = new DataPointCollection();for (int i = 0; i < 9; i++){DataPoint dataPoint = new DataPoint();dataPoint.Enabled = true;dataPoint.Exploded = false;dataPoint.AxisXLabel = "name" + i;dataPoint.YValue = (i + 1) * 10;dataPoint.Background = Brushes.Red;dataPoint.MouseLeftButtonDown += (ss, ee) => { dataPoint.Exploded = !dataPoint.Exploded; };list.Add(dataPoint);}dataSeries.DataPoints = list;dataSeries.LabelFontColor = Brushes.White;dataSeries.LabelAngle = 0;dataSeries.RenderAs = RenderAs.Column;dataSeries.LightingEnabled = true;dataSeries.LabelEnabled = true;this.chart.Series.Add(dataSeries);}/// <summary>/// 加载图表控件类型/// </summary>private void LoadChartType(){var es = Enum.GetNames(typeof(RenderAs));foreach (var item in es){this.cbChartType.Items.Add(item);}}public MainWindow(){InitializeComponent();this.LoadChartType();this.InitChart();this.BindingData();}private void Window_Loaded(object sender, RoutedEventArgs e){}private void cbChartType_SelectionChanged(object sender, SelectionChangedEventArgs e){this.chart.Series[0].RenderAs = (RenderAs)Enum.Parse(typeof(RenderAs), this.cbChartType.SelectedItem.ToString());}private void btnChartSet_Click(object sender, RoutedEventArgs e){var window = new ChartSetWindow(this.chart);window.Owner = this;window.Show();}private void btnTagSet_Click(object sender, RoutedEventArgs e){var window = new TagSetWindow(this.chart);window.Owner = this;window.Show();}private void btnRandomValue_Click(object sender, RoutedEventArgs e){foreach (var item in this.chart.Series){foreach (var s in item.DataPoints){s.YValue = new Random().Next(0, 100);Thread.Sleep(20);}}}private void btnAnimated_Click(object sender, RoutedEventArgs e){this.chart.RenderAnimate();}}
}

运行效果:

更多效果,下载Demo运行看吧!后面持续更新更多WPF样式控件,欢迎关注哟!

Visifire.Charts3.6.1源码

Visifire.Charts4.5.6源码

Visifire.Charts4.6.1源码 包含Demo

WPF Visifire.Charts4.6.1使用教程 附含源码相关推荐

  1. Hyperledger Fabric Rest API服务开发教程【含源码】

    Hyperledger Fabric Rest API服务开发教程[含源码] Hyperledger Fabric 提供了软件开发包/SDK以帮助开发者访问fabric网络 和部署在网络上的链码,但是 ...

  2. 微信短视频去水印小程序搭建教程(含源码),超级详细哦,支持流量主的

    话不多说,先看看效果,感觉OK,再往下看! 下面进入正式教程阶段 1.域名添加解析 2.宝塔后台创建站点及数据库 不懂的可以看我以前的文章,这里就不详细多说了. 小程序,其实也就是一种网页运用,如果你 ...

  3. alexa skill+自定义oauth2服务完整版教程(保姆级图文教程附demo源码)

    文章目录 前言 一.alexa skill是什么? 二.开发步骤 1.注册账号 2.创建技能 3.创建函数 技能绑定函数 部署oauth2 为技能配置账号,开启oauth2认证 alexa app 开 ...

  4. 微信小程序中引用FontAwesome字体 最完整教程 附下载源码

    目的:在小程序实现,FontAwesome.省去制作图标,引用图标的烦恼 主要步骤,下载>转码>合并样式>引用 样式,不会的可下载源码 1.到Font Awesome官网下载字体包 ...

  5. html 地球页面代码,纯CSS3实现地球自转实现代码(图文教程附送源码)

    最终成果: 素材:两张图片, espaco.jpg(1600*1000) terra.jpg(900*450) 第一步,形成静态图(地球背景全屏,地球大小为450px*450px,地球位置为上下左右居 ...

  6. 抖音最近很火的烟花表白视频制作教程 附模板源码

    抖音最近很火的烟花表白视频,估计有些朋友也在直播间刷到过,刷礼物才能制作,这些开直播的就是在赚银浪,因浪可以提现的. 这里给大家分享4个模板,2个烟花的适合表白,2个美女的适合装x,里面的文字,图片都 ...

  7. .net5项目集成百度富文本编辑器umeditor最全教程(含源码)

    目前百度的umeditor已经停止维护了,net版本的分支源码包也停留在了net farmework4左右的版本,对于想要集成这款富文本编辑器到net5平台,具有较大难度,主要体现在以下几个方面: u ...

  8. 基于SSM的旅游景点门票管理系统,高质量毕业论文范例(可直接使用),附送源码和数据库脚本,项目导入运行视频教程,论文撰写教程

    目录 1.项目技术栈 2.适合对象 3.适合课题 4.项目功能概述 4.1 功能汇总 4.2 功能介绍 5.高质量论文范例 6.毕业设计撰写视频教程 7.部分运行截图 1.项目技术栈 前端必学三个基础 ...

  9. python 自动化微信小程序_干货 | 微信小程序自动化测试最佳实践(附 Python 源码)...

    原标题:干货 | 微信小程序自动化测试最佳实践(附 Python 源码) 本文为霍格沃兹测试学院测试大咖公开课<微信小程序自动化测试>图文整理精华版. 随着微信小程序的功能和生态日益完善, ...

最新文章

  1. Varnish使用小结
  2. 利用计算机技术执行去自动化,计算机技术和自动化的关系.doc
  3. MySQl的库操作、表操作和数据操作
  4. Java程序员涨薪必备技能
  5. 05--MySQL自学教程:DDL(Data Definition Language:数据库定义语言)操作数据库(一)
  6. Drools 6.4.0.Final提供
  7. rsync 服务快速部署手册
  8. html九图拼图游戏代码,HTML5拼图游戏
  9. 去年我国科技研发投入1.76万亿元,与美国差距逐年缩小
  10. 亚马逊靠“新闻稿”推动创新,跃居市值第一
  11. windows 2003 英文版支持中文显示、中文输入的设置方法
  12. 浅谈Android进阶之路
  13. reader技巧总结2.1.doc
  14. 如何在Adobe Illustrator中绘制花园里的小矮人
  15. “没拿到一毛钱股份的老公”刷爆朋友圈 吃瓜群众雾里看花
  16. 曝光一下阿里的工资待遇和职位级别
  17. CCIE总结:路由器、交换机
  18. 什么是SaaS?SaaS系统有什么特征?
  19. 数学矩阵与行列式在计算机的应用,数学与应用数学 矩阵的应用.doc
  20. 读《断舍离》山下英子

热门文章

  1. adobe reader java_使用Adobe Reader控件结合Java实现PDF打印功能
  2. inno setup QQ音乐安装包界面
  3. 垃圾面试官让我回去等通知!
  4. 兰州理工大学c语言试题答案,兰州理工大学c语言题库81058118.doc
  5. Guice——轻量级注解Guice简单之美
  6. spring security4 cas4 整合 j_spring_cas_security_check 404
  7. 李居明风水人人都懂版之(1)家居风水大发现
  8. 用matlab求函数极限,matlab求解极限问题(limit函数的用法)
  9. Lineage OS刷机出现error 7的解决办法
  10. 【微信小程序】java配置环境变量步骤