WPF实现炫酷趋势图

Posted duel

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF实现炫酷趋势图相关的知识,希望对你有一定的参考价值。

环境:

    系统: 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 < 1)
    
        foreach (var point in points.GetRange(1, points.Count - 1))
        
            var myLineSegment = new LineSegment  Point = point ;
            myPathSegmentCollection.Add(myLineSegment);
        
    
    else
    
        for (int i = 0; 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;
技术图片 源码下载:微信扫描下方二维码文章末尾获取链接。

                           技术图片?

技术图片

以上是关于WPF实现炫酷趋势图的主要内容,如果未能解决你的问题,请参考以下文章

WPF Expander 炫酷自定义Style

Photoshop和WPF双剑配合,打造炫酷个性的进度条控件

来瞧瞧,WPF 炫酷走马灯!

如何制作炫酷的热力图

100天精通Python(可视化篇)——第79天:matplotlib绘制不同种类炫酷折线图代码实战(网格趋势对比百分比多条折线堆积百分比堆积多坐标子图3D折线图)

RecyclerView + SnapHelper实现炫酷ViewPager效果