WPF Visifire 入门-动态曲线图[通俗易懂]

WPF Visifire 入门-动态曲线图[通俗易懂]kagula2019-3-18这里用源代码的形式,示范如何画出一个最简单的动态曲线图。开发环境,Visualstudio2017CommunityUpdate5项目类型:WPFC#.NetFramework4.6.1本文适用对象:有两年没有开发C#WPF的程序员,通过这个示例可以快速回忆。下面是运行效果图,不停显示最新生成的十个数据点。让…

大家好,又见面了,我是你们的朋友全栈君。

kagula

2019-3-18

这里用源代码的形式,示范如何画出一个最简单的动态曲线图。

开发环境,Visual studio 2017 Community Update5 

项目类型: WPF C# .NetFramework 4.6.1 

本文适用对象:  有两年没有开发C# WPF的程序员, 通过这个示例可以快速回忆。

下面是运行效果图,不停显示最新生成的十个数据点。

WPF Visifire 入门-动态曲线图[通俗易懂]

让程序跑起来分三步

第一步

新建WPF项目, 添加Reference, WPFVisifire.Charts.dll

第二步

修改xaml, 修改后的内容如下

<Window x:Class="testVisifire.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:vc="clr-namespace:Visifire.Charts;assembly=WPFVisifire.Charts"
        xmlns:local="clr-namespace:testVisifire"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <vc:Chart Name="chart" DockPanel.Dock="Left" Margin="6" />
    </Grid>
</Window>

第三步

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Visifire.Charts;

namespace testVisifire
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        System.Timers.Timer _timer;
        Random _random = new Random();

        public MainWindow()
        {
            InitializeComponent();

            initChart();

            addData2Chart();

            initTimer();

            _timer.Start();
        }

        private void initChart()
        {
            // 创建一个标题的对象
            Title title = new Title();

            // 设置标题的名称
            title.Text = "abc";
            title.Padding = new Thickness(0, 10, 5, 0);

            // 向图标添加标题
            chart.Titles.Add(title);

            // 初始化一个新的Axis 
            Axis xAxis = new Axis();
            // 设置axis的属性
            //图表的X轴坐标按什么来分类,如时分秒 
            xAxis.IntervalType = IntervalTypes.Seconds;
            //图表中的X轴坐标间隔如2,3,20等,单位为xAxis.IntervalType设置的时分秒。 
            xAxis.Interval = 1;
            //设置X轴的时间显示格式为7-10 11:20 
            xAxis.ValueFormatString = "hh:mm:ss";
            //给图标添加Axis 
            chart.AxesX.Add(xAxis);
            Axis yAxis = new Axis();
            //设置图标中Y轴的最小值永远为0 
            yAxis.AxisMinimum = 0;
            yAxis.AxisMaximum = 64;
            //设置图表中Y轴的后缀 
            yAxis.Suffix = "";
            chart.AxesY.Add(yAxis);
        }

        private void addData2Chart()
        {
            // 创建一个新的数据线。 
            DataSeries dataSeries = new DataSeries();

            // 设置数据线的格式。 
            dataSeries.RenderAs = RenderAs.Line;
            dataSeries.XValueType = ChartValueTypes.DateTime;

            /*
            for (int i = 0; i < 32; i++)
            {            
                // 设置数据点 
                DataPoint dataPoint;
                // 创建一个数据点的实例。 
                dataPoint = new DataPoint();

                // 设置X轴点 
                DateTime dt = DateTime.Now;
                dataPoint.XValue = dt.AddSeconds(i);

                //设置Y轴点 
                dataPoint.YValue = i;
                dataPoint.MarkerSize = 8;
                dataPoint.Tag = "bbb";

                //设置数据点颜色 
                dataPoint.Color = new SolidColorBrush(Colors.LightGray);

                //添加数据点 
                dataSeries.DataPoints.Add(dataPoint);

                //测试删除前面的点
                if(dataSeries.DataPoints.Count>10)
                {
                    dataSeries.DataPoints.RemoveAt(0);
                }
            }
            */
            // 添加数据线到数据序列。 
            chart.Series.Add(dataSeries);
        }

        private void initTimer()
        {
            _timer = new System.Timers.Timer(1000);

            //实例化Timer类,设置间隔时间为10000毫秒;   

            _timer.Elapsed += new System.Timers.ElapsedEventHandler(onTimer);

            //到达时间的时候执行事件; 
        }


        public void onTimer(object source, System.Timers.ElapsedEventArgs e)
        {
            this.Dispatcher.Invoke(new Action(() => {
                try
                {
                    DataSeries ds = chart.Series[0];
                    DataPoint dataPoint = new DataPoint();

                    // 设置X轴点 
                    DateTime dt = DateTime.Now;
                    dataPoint.XValue = dt.AddSeconds(10);

                    //设置Y轴点 
                    dataPoint.YValue = _random.Next(1,32);
                    dataPoint.MarkerSize = 8;

                    //设置数据点颜色 
                    dataPoint.Color = new SolidColorBrush(Colors.LightGray);

                    //添加数据点 
                    ds.DataPoints.Add(dataPoint);

                    //测试删除前面的点
                    if (ds.DataPoints.Count > 10)
                    {
                        ds.DataPoints.RemoveAt(0);
                    }
                }
                catch (Exception ex)
                {
                    System.Diagnostics.Debug.WriteLine(ex.Message);
                }
            }));         

        }
    }
}

最后F5就可以运行了。

注意:

[1]如果要让控件自动适应窗口大小建议外面一层用Grid,里面再套StackPanel.

[2]在xaml中等布局好后,最后放visifire, 因为放了visifire,图形编辑环境就不能render了,等有时间,研究下如何解决这个问题。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/162803.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • react的map遍历_javamap遍历方式

    react的map遍历_javamap遍历方式记录一下项目制作过程中学到的一些方法,以便温习render(){return(<ulclassName={style.decoratewrapper}>{this.state.decoratedata.map((item,i)=>(<likey={i}>

  • html导航栏自动调间距,HTML CSS导航栏间距[通俗易懂]

    html导航栏自动调间距,HTML CSS导航栏间距[通俗易懂]我做了一个CSS导航栏,但是在每个“navbar-item”之间,都有一点空间。我不希望那里有任何变化!有没有办法做到这一点,而不改变每个navbar-item的余裕?HTMLCSS导航栏间距Home-UnhandyFir9#wrapper{box-shadow:0px0px20px10pxblack;left:0px;top:0px;margin:auto;margin-…

  • Win10下loadrunner11激活成功教程安装与运行

    Win10下loadrunner11激活成功教程安装与运行一.安装1.      下载loadrunner11进行安装。打开安装安装程序进入如图界面(可能会出现提示,不受信任。出现这个情况尝试用此方法解决下“win+r”打开运行,输入gpedit.msc进入组策略,依次选择“计算机配置”、“windows设置”、“安全设置”、“本地策略”、“安全选项”,在右侧下拉选择“用户账户控制:以管理员批准模式运行所有管理员”,双击它,选择“已禁用”,重启即可关闭…

  • 快速幂的大数运算_快速幂模

    快速幂的大数运算_快速幂模快速幂运算1.什么是快速幂2.快速幂的“小数”运算3.高精度(大数)的快速幂1.什么是快速幂快速幂,是指在进行幂运算的时候,用一种快速方法得出答案。比如,要求2^100的值,那按照最简单的方式,就是一个一个2去相乘,然后最终得到答案,那么这样就要计算100次,非常浪费时间,那么快速幂就是使用一种技巧使得将其计算次数减少,快速得到答案。2.快速幂的“小数”运算对于系统内置类型的整型,暂且叫他“小数”,这个时候进行快速幂运算,代码如下:#include<cstdio>#include&l

    2022年10月27日
  • 最全Mac系统快捷键一览

    最全Mac系统快捷键一览Mac中主要有四个修饰键,分别是Command,Control,Option和Shift。这四个键分别有自己的图案,他们经常出现在Mac应用程序中的菜单栏里,方便你随时学习新的快捷键。MAC键盘快捷键符号图例通用Command是Mac里最重要的修饰键,在大多数情况下相当于Windows下的Ctrl。所以以下最基本操作很好理解:Command+Z 撤销Comma

  • kfold交叉验证_SPSS交叉验证法

    kfold交叉验证_SPSS交叉验证法一、前言在机器学习建模过程中,通行的做法是将数据分为训练集和测试集。测试集是与训练独立的数据,完全不参与训练,用于最终模型的评估。在训练过程中,经常会出现过拟合的问题,就是模型可以很好的匹配训练数据,却不能很好在预测训练集外的数据。如果此时就使用测试数据来调整模型参数,就相当于在训练时已知部分测试数据的信息,会影响最终评估结果的准确性。通常的做法是在训练数据再中分出一部分做为验证(Validation)数据,用来评估模型的训练效果。验证数据取自训练数据,但不参与训练,这样可以相对客观的评估模型对于训

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号