用WPF山寨折线图.docVIP

  • 24
  • 0
  • 约6.12千字
  • 约 6页
  • 2016-11-08 发布于河南
  • 举报
用WPF山寨折线图

用WPF山寨折线图,抄?是狠狠的抄 原文来自:雨枫技术教程网 原文网址:/plus/view-172870-1.html 对于没有美术细胞的我来说,抄袭人家的设计或是创意是再平常不过的事,我承认这很无耻,如果在伟大“天朝”的教育体系下还可能升级为道德上的沦丧,毕竟人家搞个东西也不容易,可任务在身,只好下策,脸皮总是在生存以后才拿上台面的。所以也就不避讳了,俺就是抄的。 该图抄袭自 万仓一黍 的在winform中运用FusionCharts图表(一) 一.抄袭模式 尽管样式要抄袭,可代码不能抄袭,因为没有源码^ – ^ 。首先我们先从使用者的角度出发,作为使用者,我希望怎么来使用控件,而且要考虑到WPF的一些特性。线条可以一个个数组给,和传统的控件一样。可我认为这并不符合WPF的组装特性,每个线条可以是自由控制的,可粗可细,可虚线可实线。 如效果为这样的图: 可以是这样的设计,也就是每个控件自己是一层,和其它控件没有直接联系。就连底面也是可以自由搭配的。 使用还有个就是代码的书写,那么在XAML中单个的控件就可以写成这样 Sample:LineChart LineColor=Orange LineThickness=20 Datas={Binding Items} /如若要实现多个拼接,把控件放到可以层叠的容器当中就可以了,比如Grid.如果你的数据是集合形式的,还可以借助ItemsControl这样的集合控件。 这里可能已经有人看出来抄袭的是WPF装饰器的模式和概念。 二.抄袭图形 初步设想不错,可还不够灵活,假设每个点的样式可以更改而不仅仅是这种默认的白点,如根据喜好可以设置五角星,小红旗,这怎么办?一般情况下我们会为控件再添加个点的模板属性;在这里我又踟蹰了很久,是否真的需要这么的“一步到位”?在几年前,我曾听说装修现在有个观点叫做“轻装修,重装饰”,就是建好一个架子,里面的东西是可以由着喜好、心情、季节随意搭配。所以我更倾向于控件首先能实现一些比较简单的功能,可如果要更高级的功能和效果应该可以附加上的,毕竟有时候一开始也很难知道用户的喜好,加上有时候时间紧迫就只能先留下框架,以后有机会再讨价还价索要时间。 产品功能暂时可以延期,却不能老是跳票,“永远的毁灭公爵”绝不是好榜样。 对每个点进行模板,设置每个点实际的位置,很容易让我们想到使用ItemsControl,做个放置位置的Panel就可以了,当然很明显我们并不需要那么多的功能,只要求每个点都能设置一个模板,那么好吧,依葫芦画瓢来个ItemTemplate、 ItemTemplateSelector、ItemStringFormat属性,只需要在初始化的时候声明个UIElementCollection 变量,在数据存放以后为数据new个性模板就成,如GetContainerForItemOverride()方法。 在这种条件下做个层,可以轻松的看到类似这样的效果,当然音符是我再次发挥抄袭特长的结果,具体的可以看/free-icons.php 对于层来说,还可以有很多的发挥,如下: 对这种应用也可以手到擒来: 不要惊讶,WPF是有API的,使用CombinedGeometry然后用GeometryCombineMode.Exclude就可以了。 因为底色也可以随意混搭,所以加个水印、Logo,背景提示语之类的也不是什么难事。 对于以上的所谓“创意”,当然是抄袭的,参见各大网站统计图。 三.抄袭代码 项目经理有要求图上的所有线条比例要统一,这个要求很合乎常理,可我们的线条都是单独的一个控件,你也许会说让后端计算出一个最大值绑定一下不就OK了,但一般控件都可以达到的效果,凭什么就要让业务干预,毕竟我们分层的原则是UI和业务分离,虽然有时候会有些妥协,但我们也要尽可能的做大完善,水平不就是在这样的“苛责”中进步的么? 感觉不错的抄法 ▲名字抄袭 做为前端人员,可能希望只要设置一个属性就可以完成,其实它的目的就是为了功能的附加,感觉有点像ToolTipService吧,那么我们的名字就叫LineChartService。 Sample:LineChart LineColor=Orange Sample:LineChartService.GroupName=group1 LineThickness=2 Datas={Binding Item

文档评论(0)

1亿VIP精品文档

相关文档