首先说一下思路: 先创建一个控件(其实就是一个canvas),在canvas里面生成一条线,给这条线绑定一个PointCollection,在主界面中用一个定时器改变这个PointCollection的值就行了.

1.创建的控件

 public partial class BrokenLine : UserControl
{
public BrokenLine()
{
InitializeComponent();
this.Loaded += BrokenLine_Loaded;
}
private Brush mBrushes;
private PointCollection coordinatePoints = new PointCollection();
Polyline curvePolyline = new Polyline();
public BrokenLine(PointCollection pointCollection,Brush brushes)
{
InitializeComponent();
this.Loaded += BrokenLine_Loaded;
coordinatePoints = pointCollection;
mBrushes = brushes;
}
private void BrokenLine_Loaded(object sender, RoutedEventArgs e)
{
curvePolyline = new Polyline();
curvePolyline.Stroke = mBrushes;
curvePolyline.StrokeThickness = ;
Canvas.SetLeft(curvePolyline, );
Canvas.SetTop(curvePolyline, );
curvePolyline.Points = coordinatePoints;
chartCanvas.Children.Add(curvePolyline);
}
}

2.主界面的代码

  BrokenLine xinlv_brokenLine = new BrokenLine(mXL.CoordinatePoints, new SolidColorBrush((Color)ColorConverter.ConvertFromString("#35CD75")));
Canvas.SetTop(xinlv_brokenLine, );
canvas_TZ.Children.Add(xinlv_brokenLine);

实例化一个控件

   if (points!=null && points.Count>)///points作为一个缓存集合
{
if (points.Count >= )
{
for (int k = ; k < ; k++)
{
CoordinatePoints.Add(points[k]);
if (coordinatePoints.Count > mShowLength)//mShowLength控制最多能显示的长度(点的个数)
{
AddCurvePoint(true, 0.8);//将要显示的点全部向前移动一位
}
}
points.RemoveRange(, );
}
else {
for (int k = ; k < points.Count; k++)
{
CoordinatePoints.Add(points[k]);
if (coordinatePoints.Count > mShowLength)
{
AddCurvePoint(true, 0.8);
}
}
points.Clear();
} }

定时器代码

       private void AddCurvePoint(Boolean isMeet, double length)
{
if (isMeet)
{
CoordinatePoints.RemoveAt();
for (int i = ; i < CoordinatePoints.Count-; i++)
{
CoordinatePoints[i] = new Point(CoordinatePoints[i].X - length, CoordinatePoints[i].Y);
}
CoordinatePoints[coordinatePoints.Count-] = new Point(CoordinatePoints[coordinatePoints.Count-].X - length*mX, CoordinatePoints[coordinatePoints.Count - ].Y);
mX++;
} }

WPF之动态加载曲线的更多相关文章

  1. WPF中动态加载XAML中的控件

    原文:WPF中动态加载XAML中的控件 using System; using System.Collections.Generic; using System.Linq; using System. ...

  2. WPF 3D动态加载模型文件

    原文:WPF 3D动态加载模型文件 这篇文章需要读者对WPF 3D有一个基本了解,至少看过官方的MSDN例子. 一般来说关于WPF使用3D的例子,都是下面的流程: 1.美工用3DMAX做好模型,生成一 ...

  3. WPF 确认动态加载数据完成

    整个wpf程序是读取xml文件生成的,所以当数量较大而且结构复杂的时候,就会出现显示一个空白(我这里设置了背景色,所以显示黑屏,默认是空白的)的窗口,然后才显示控件. 但现在要求必须在控件显示完成后才 ...

  4. [WPF学习笔记]动态加载XAML

    好久没写Blogs了,现在在看[WPF编程宝典],决定开始重新写博客,和大家一起分享技术. 在编程时我们常希望界面是动态的,可以随时变换而不需要重新编译自己的代码. 以下是动态加载XAML的一个事例代 ...

  5. WPF动态加载3D 放大-旋转-平移

    原文:WPF动态加载3D 放大-旋转-平移 WavefrontObjLoader.cs 第二步:ModelVisual3DWithName.cs public class ModelVisual3DW ...

  6. ZedGraph如何动态的加载曲线

    ZedGraph的在线文档 http://zedgraph.sourceforge.net/documentation/default.html 官网的源代码 http://sourceforge.n ...

  7. mvvm模式下在WPF项目中动态加载项目的程序集和类

    在mvvm模式的wpf项目中有个需求需要去加载解决方案的程序集,并且根据程序集去动态加载当前程序集的类,做成下拉框形式. 效果: //全局定义 private ComboBox abList= nul ...

  8. WPF中Style文件的引用——使用xaml代码或者C#代码动态加载

    原文:WPF中Style文件的引用--使用xaml代码或者C#代码动态加载 WPF中控件拥有很多依赖属性(Dependency Property),我们可以通过编写自定义Style文件来控制控件的外观 ...

  9. WPF 动态加载主题由zip

    经典主题的方式 主题战略 加载速度 本机支持 (不需要额外的代码) 支持代码为主题 (捆绑代码 & 资源成单独的文件) 支持资源层次结构中导航 动态加载 动态卸载 轻松地编辑和编译 (不需要安 ...

随机推荐

  1. C++ 词汇表

    C++词汇表 A abort()                       特殊函数 如果一个函数抛出异常,但在通往异常函数的调用链中找不到与之匹配的catch,则该程序通常以此函数调用终止 abs ...

  2. Spring Boot 2.X(九):Spring MVC - 拦截器(Interceptor)

    拦截器 1.简介 Spring MVC 中的拦截器(Interceptor)类似于 Servlet 开发中的过滤器 Filter,它主要用于拦截用户请求并作相应的处理,它也是 AOP 编程思想的体现, ...

  3. SpringMVC参数绑定,这篇就够了!

    SpringMVC参数绑定,简单来说就是将客户端请求的key/value数据绑定到controller方法的形参上,然后就可以在controller中使用该参数了 下面通过5个常用的注解演示下如何进行 ...

  4. go-爬图片

    go语言爬取图片 注:动态加载出来的爬取不到,或怕取出来图片出错,代码中的网页是可以正常爬取的 package main import ( "fmt" "io" ...

  5. 深入selenium模块基础操作

    selenium模块的基本操作 一.模拟浏览器 ​ 谷歌.Firefox.Safari等浏览器 browser=webdriver.Chrome() browser=webdriver.Firefox ...

  6. JavaScript动态加载script方式引用百度地图API 拓展---JavaScript的Promise

    上一篇博客JavaScript动态加载script方式引用百度地图API,Uncaught ReferenceError: BMap is not defined 这篇文章中我接触到一个新的单词:Pr ...

  7. Java 网络编程初探

    Java 网络编程 网络编程 网络编程:进行服务器端与客户端编程的开发操作实现. java.net:网络操作包 B/S结构: 浏览器/服务器模式(Browser/Server) 不在开发客户端代码 开 ...

  8. Spring Boot 2 使用自定义配置

    在application.yml定义配置后,可以使用Environment来读取配置,也可以使用@Value注解让业务代码去读取配置.如果属性较多,可以定义属性映射对象. 开发环境:IntelliJ ...

  9. IDEA使用svn拉取多模块项目

    如果没有安装过svn客户端,安装的时候需要选择安装第二个工具,如下图所示 安装小乌龟, 自行搜索, 注意点是需要选择安装第二个工具 因为默认是不安装的, 而这个组件是集成到IDEA ”必须的” . 如 ...

  10. VirtualBox设置自动适应屏幕

    设备 --> 安装增强功能 等待安装完成,就能自动适应屏幕大小了