环境:

系统: Window 7以上;

工具:VS2013及以上。

研发语言及工程:

C# WPF 应用程序

效果:

简介:

不需要调用第三方Dll, 仅仅在WPF中使用贝塞尔曲线,不到500行代码构建自定义的趋势图效果。

原理:

WPF中路径Path的Data值为PathGeometry。如:

  <Path x:Name="PathData1" Stroke="#FFEE4141" StrokeThickness="2">
<Path.Fill>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0" Opacity="0.5">
<GradientStop Color="#FFEE4141" Offset="0"/>
<GradientStop Color="#7F031528" Offset="1"/>
</LinearGradientBrush>
</Path.Fill>
<Path.Data>
<PathGeometry x:Name="PgData1"/>
</Path.Data>
</Path>

PathGeometry.Figures的Value类型为PathFigureCollection;即PathFigure对象的集合,将一系列的Point数据已构建Beizer曲线的形式处理后生成PathFigureCollection对象,最终以PathGeometry对象赋值给Path.Data即可实现如上述所示的效果。

主要处理函数:

private void SetPathData(PathGeometry geo, List<Point> points)
{
var myPathFigure = new PathFigure { StartPoint = points.FirstOrDefault() };
var myPathSegmentCollection = new PathSegmentCollection();
var beizerSegments = BeizerUtils.InterpolatePointWithBeizerCurves(points, false); if (beizerSegments == null || beizerSegments.Count < )
{
foreach (var point in points.GetRange(, points.Count - ))
{
var myLineSegment = new LineSegment { Point = point };
myPathSegmentCollection.Add(myLineSegment);
}
}
else
{
for (int i = ; i < beizerSegments.Count; i++)
{
BeizerCurveSegment beizerCurveSegment = beizerSegments[i];
PathSegment segment = new BezierSegment
{
Point1 = beizerCurveSegment.FirstControlPoint,
Point2 = beizerCurveSegment.SecondControlPoint,
Point3 = beizerCurveSegment.EndPoint
};
myPathSegmentCollection.Add(segment);
}
} myPathFigure.Segments = myPathSegmentCollection; var myPathFigureCollection = new PathFigureCollection { myPathFigure };
geo.Figures = myPathFigureCollection;
}

 源码下载:微信扫描下方二维码文章末尾获取链接。

最新文章

  1. survey on Time Series Analysis Lib
  2. Android开发笔记--hello world 和目录结构
  3. 使用Jquery后去div个数
  4. Python学习笔记16:标准库多线程(threading包裹)
  5. HDU 5813 Elegant Construction
  6. Session是否为新建情况的判断
  7. 使用Spigot搭建MineCraft服务器
  8. JavaScript 中 闭包 的详解
  9. Hibernate缓存和状态
  10. Spring mvc之 发邮件(qq.163...)
  11. maven快速下载jar镜像
  12. Selenium 实现 Web 自动化的原理 (软件测试52讲学习笔记)
  13. NCBI通过氨基酸位置查看相邻SNP
  14. JavaWeb学习 (十七)————JSP属性范围
  15. Python知识点整理,基础5 - 文件操作
  16. 解决SecureCRT超时自动断开的问题
  17. 发送短信功能(C#)
  18. Eclipse \ MyEclipse \Scala IDEA for Eclipse里如何将控制台console输出的过程记录全程保存到指定的文本文件(图文详解)
  19. LeetCode题解之Swap Nodes in Pairs
  20. JS实现文本中查找并替换字符

热门文章

  1. 【华为云实战开发】9.如何进行PHP项目的快速搭建并实现CICD?【华为云技术分享】
  2. [Abp vNext 源码分析] - 13. 本地事件总线与分布式事件总线 (Rabbit MQ)
  3. 洛谷 题解 P3161 【[CQOI2012]模拟工厂】
  4. luogu P4302 [SCOI2003]字符串折叠
  5. 压缩感知重构算法之CoSaMP算法python实现
  6. 第七章 jQuery中的事件与动画
  7. 【新手必学】Python爬虫之多线程实战
  8. 【CSS】318- CSS实现宽高等比自适应容器
  9. 前端表单提交,提交有图片出现的问题,及解决方案 兼容ie9
  10. 带你使用Visual Studio 2019创建一个MVC Web应用