首先说一下思路: 先创建一个控件(其实就是一个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. js获取数组最大值或最小值

    数组对象arr中属性num最大值最小值 // 最大值 Math.max.apply(Math,arr.map(item => { return item.num })) arr.sort((a, ...

  2. Mybatis中的#{}和${}的区别?

    1,首先Mybatis中的#{}与${}到底有什么区别? #{}:表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换,#{} ...

  3. python 学习 (1-3)

    流程控制if语句 语法种类:   第⼀种语法: if 条件: #引号是将条件与结果分开. 结果1. # 四个空格,或者⼀个tab键,这个是告诉程序满⾜这个条件的 结果2.   如果条件是真(True) ...

  4. C++入门到理解阶段二核心篇(1)——c++面向对象概述、内存分析、引用

    1.c++内存分区模型 c++程序在运行的过程中,内存会被划分为以下四个分区 代码区:程序的所有程序的二进制代码,包括注释会被放到此区 全局区:存放静态变量.全局变量.常量(字符串常量和const修饰 ...

  5. WebShell代码分析溯源(三)

    WebShell代码分析溯源(三) 一.一句话变形马样本 <?php $g = array('','s');$gg = a.$g[1].ser.chr('116');@$gg($_POST[ge ...

  6. C# 同步转异步 TaskCompletionSource

    当我们遇到一些异步执行又无法等待时的逻辑,比如动画的执行. 而业务上又需要等待逻辑的完成,再去处理后续的操作.这时需要转成异步方法 如下,同步执行一个动画后,再输出日志: private async ...

  7. Excel导入导出DataGridView

    /// <summary> /// excel表保存到dataTable中 /// </summary> /// <param name="path" ...

  8. PlayJava Day013

    今日所学: /* 2019.08.19开始学习,此为补档. */ 1.BufferedImage:是Image的一个子类,两者的主要作用就是将一副图片加载到内存中,即图像缓冲区. 对于本地图片: Fi ...

  9. read write方式打开PHYSICAL STANDBY,闪回和还原测试

    以下大部分都在STANDBY执行,主库执行(两次)的会提示 [STANDBY read write方式打开测试]检查standby状态SQL> SELECT NAME,DATABASE_ROLE ...

  10. 【论文阅读】Second-order Attention Network for Single Image Super-Resolution

    概要 近年来,深度卷积神经网络(CNNs)在单一图像超分辨率(SISR)中进行了广泛的探索,并获得了卓越的性能.但是,大多数现有的基于CNN的SISR方法主要聚焦于更宽或更深的体系结构设计上,而忽略了 ...