2
回答
Visifire 使用笔记
科大讯飞通用文字识别100000次/天免费使用。立即申请   

visifire是silverlight下很不错的一套开源组件,最近其发布了2.0beta版本,本文将主要记录一些这个版 本跟以前版本不同的地方.

昨天初步把1.55版本移植到了2.0beta,没有遇到太大的麻烦,不过确实还是进行一些细节的修改,这些更 改看上去更合理了,很多东西都不用往children下硬塞,直接类似Serise.Add或者Titles.Add就可以了.

由于 visifire更新速度还是挺快的,所以请留意下,写这篇文章的时候visifire的版本是2.0 beta,未来的版本可能会有变化,具体细节请阅读当前时间的visifire对应版本的文档.

首先,图表最大的一个作用之一就是帮助我们观察数据,当图表 中的数字很大并且它们之间的值相差的很小的时候,通常就会很难观察,很难从图表中发现信息,比如下面这样的图:


 附件: 您所在的用户组无法下载或查看附件

visifire为我们提 供了一个属性,StartFromZero,通过设置这个属性为false,就可以帮助我们观察到数据的差异,效果如下图:


 附 件: 您所在的用户组无法下载或查看附件
砍去了公共的部分,观察数据就 容易多了.这里跟excel里的表格表达有些不同,在excel里是把中间不必要的部分加上...省去公共的部分.

图表的创建跟之前的版 本变化还是不大的,我在迁移的过程没有遇到太大的问题.关于创建图表的示例代码大家可以展开下面的代码块(笔者以后也会经常回来参考这段代码:)):

  1. private void CreateChart()
  2. {
  3.     // Create a Chart element
  4.     Chart chart = new Chart();
  5.     // Set chart width and height
  6.     chart.Width = 400;
  7.     chart.Height = 300;
  8.     // Create new DataSeries
  9.     DataSeries dataSeries = new DataSeries();
  10.     // Number of DataPoints to be generated
  11.     int numberOfDataPoints = 10;
  12.     // To set the YValues of DataPoint
  13.     Random random = new Random();
  14.     // Loop and add a few DataPoints
  15.     for (int loopIndex = 0; loopIndex < numberOfDataPoints; loopIndex++)
  16.     {
  17.         // Create a DataPoint
  18.         DataPoint dataPoint = new DataPoint();
  19.         // Set the YValue using random number
  20.         dataPoint.YValue = random.Next(1, 100);
  21.         // Add DataPoint to DataSeries
  22.         dataSeries.DataPoints.Add(dataPoint);
  23.     }
  24.     // Add DataSeries to Chart
  25.     chart.Series.Add(dataSeries);
  26.     // Add chart to the LayoutRoot for display
  27.     LayoutRoot.Children.Add(chart);
  28. }
复制代码

从这个 代码中可以看出像DataSeries和Datapoint以及Title对象都有了明确的归属,不需要Children.Add的方式了.个人认为这样 是非常合理的.

对于数据的实时更新部分,可以参考如下的代码:

  1. for (Int32 i = 0; i < 5; i++)
  2. {
  3.     // Update DataPoint YValue property
  4.     chart.Series[0].DataPoints.YValue = rand.Next(-80, 100); // Changing the dataPoint YValue at runtime
  5. }
复制代码

看上去简 单多了,直接更改Series里面的Datapoint实例就可以,但是实时更新的时候不知道为什么visifire没有提供动画,而是很生硬的就显示过了了,这样显示类似监视机 器cpu和内存消耗的功能还可以,比如visifire官方网站上的这段演示:


 附件: 您所在的用户组无法下载或查看附件
不过,可能是考虑到数据的 update有insert,delete和edit几种情况,所以目前的这个版本没有考虑进来这个功能(当然或许有我不知道,还麻烦熟悉的朋友指点一 下).

另外对于图表类型的定义现在有一个明确的枚举类型了,其是很早就应该这么做了.

  1. dataSeries.RenderAs = RenderAs.Line;
复制代码

这个枚举 类型可以取很多, 有如下类型:

Member name
Area
Bar
Bubble
Column
Doughnut
Line
Pie
Point
StackedArea
StackedArea100
StackedBar
StackedBar100
StackedColumn
StackedColumn100

具 体的效果请大家参考Visifire Gallery,这里简单截取一个图下来:


附件: 您所在的用户组无法下载或查看附件


虽然网上关注 visifire的还不是很多,社区资源比较少,不过visifire的文档还是很全面的,还有很多示例可以让我们参考.我在一些BI应用中也一直在使用 这个组件,效果很不错,推荐更多的朋友使用.

一些细节:visifire的footprint从140多KB增加到了199KB,相对来 说还是可以承受的,另外visifire的网站标题也更换成了Silverlight & WPF Chart,看得出来在2.0版本上所做的努力.目前还是beta,相信正式版本很快就会和大家见面,其是visifire的更新速度还是很不错的,半个 月通常就会有一个版本的更新. (文/aspnetx

举报
红薯
发帖于9年前 2回/1K+阅
顶部