C#上位机软件之——曲线显示

本文介绍如何使用InteractiveDataDisplay.WPF插件在WPF应用程序中构建曲线显示界面,包括安装方法、关键参数设置及事件处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

构建曲线显示界面

本设计基于 InteractiveDataDisplay.WPF 数据交互显示插件进行设计
安装方法:工具->NuGet包管理->管理解决方案的NuGet程序包,在浏览界面搜索该程序包,然后下载安装即可。
在文件开头引入这个程序包

 xmlns:d3="clr-namespace:InteractiveDataDisplay.WPF;assembly=InteractiveDataDisplay.WPF"

创建实例并设置相关参数

<d3:Chart Name="plotter" IsHorizontalNavigationEnabled="true" IsVerticalNavigationEnabled="true"  PlotHeight="1000" PlotWidth="300" MouseWheel="plotter_MouseWheel" KeyDown="plotter_KeyDown" MouseMove="plotter_MouseMove" MouseUp="plotter_MouseUp" MouseLeftButtonUp="plotter_MouseLeftButtonUp"  >
            <d3:Chart.Title>
                    <TextBlock HorizontalAlignment="Center"  FontSize="18" VerticalAlignment ="Center" IsEnabled="False" >采样曲线</TextBlock>
            </d3:Chart.Title>
            <d3:Chart.LegendContent>
             <d3:LegendItemsPanel>
                 <d3:LegendItemsPanel.Resources>
                     <DataTemplate x:Key="InteractiveDataDisplay.WPF.LineGraph">
                         <StackPanel Orientation="Horizontal">
                             <CheckBox IsChecked="{Binding Path=Visibility, Converter={StaticResource VisibilityToCheckedConverter}, Mode=TwoWay}"/>
                             <Line Width="15" Height="15" X1="0" Y1="0" X2="15" Y2="15" Stroke="{Binding Path=Stroke}" StrokeThickness="2"/>
                             <TextBlock Margin="5,0,0,0" Text="{Binding Path=Description}"/>
                         </StackPanel>
                     </DataTemplate>
                 </d3:LegendItemsPanel.Resources>
             </d3:LegendItemsPanel>
         </d3:Chart.LegendContent>
         <Grid Name ="Lines"/>
</d3:Chart>

主要参量意义:
IsHorizontalNavigationEnabled 和 IsVerticalNavigationEnabled 分别为横向与纵向导航窜口,当设置为false 则限制显示数据的横向和纵向范围,不能拖动了。
plotHeight 和 plotwidth 则为初始显示时横纵坐标的高度和宽度
MouseWheel 为鼠标滚轮的事件响应函数,该控件有默认的事件响应处理(缩放横轴和纵轴),并且默认不再响应自定义函数,如果想要它响应自己的函数则需要在初始化时调用

plotter.AddHandler(Chart.MouseWheelEvent, new MouseWheelEventHandler(plotter_MouseWheel), true);

重新激活用户事件响应。
同样原因,MouseLeftButtonUpEvent事件也需要做同样处理:

plotter.AddHandler(Chart.MouseLeftButtonUpEvent, new MouseButtonEventHandler(plotter_MouseLeftButtonUp), true);

d3:Chart.Title为图表的标题属性;
d3:Chart.LegendContent为图表标签内容
在这里插入图片描述
该标签的模板为

 <d3:LegendItemsPanel>
     <d3:LegendItemsPanel.Resources>
         <DataTemplate x:Key="InteractiveDataDisplay.WPF.LineGraph">
             <StackPanel Orientation="Horizontal">
                 <CheckBox IsChecked="{Binding Path=Visibility, Converter={StaticResource VisibilityToCheckedConverter}, Mode=TwoWay}"/>
                 <Line Width="15" Height="15" X1="0" Y1="0" X2="15" Y2="15" Stroke="{Binding Path=Stroke}" StrokeThickness="2"/>
                 <TextBlock Margin="5,0,0,0" Text="{Binding Path=Description}"/>
             </StackPanel>
         </DataTemplate>
     </d3:LegendItemsPanel.Resources>
 </d3:LegendItemsPanel>

解析:
表面该DateTemplate为InteractiveDataDisplay.WPF.LineGraph的参数显示打造,所以显示的控件需要连接到LineGraph的对应参数
比如
将CheckBox 的IsCheck属性与LineGraph的是否显示连接,此处需要进行,数据转换,所以在程序中加入转换类

  public class VisibilityToCheckedConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return ((Visibility)value) == Visibility.Visible;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return ((bool)value) ? Visibility.Visible : Visibility.Collapsed;
        }
    }

并在文件开头引用该类

 <UserControl.Resources>
    <local:VisibilityToCheckedConverter x:Key="VisibilityToCheckedConverter"/>
</UserControl.Resources>

<Line Width="15" Height="15" X1="0" Y1="0" X2="15" Y2="15" Stroke="{Binding Path=Stroke}" StrokeThickness="2"/> 将颜色绑定
<TextBlock Margin="5,0,0,0" Text="{Binding Path=Description}"/> 将描述绑定

### C# 上位机开发教程概述 #### 通信协议的选择 对于上位机与下位机之间的通信,选择合适的通信协议至关重要。常见的通信协议有Modbus、OPC、串口通信(RS232/485)、TCP/IP等[^1]。这些协议各有特点,在实际项目中应根据具体需求和技术条件进行选择。 #### 界面设计原则 在构建用户界面(UI)方面,采用Windows Forms或WPF(Windows Presentation Foundation),能够快速搭建直观友好的图形化操作环境。特别是对于初学者而言,Windows Forms因其较低的学习曲线而成为首选方案之一[^4]。 #### 示例代码:简单的C#上位机窗体应用 下面给出一段基于Windows Forms框架下的简易示例代码,演示了一个基本的按钮控件及其事件响应机制: ```csharp using System; using System.Windows.Forms; namespace SimpleSCADAApp { public partial class MainForm : Form { public MainForm() { InitializeComponent(); this.Text = "Simple SCADA Application"; Button btnConnect = new Button { Text = "连接", Location = new Point(10, 10), Width=75 }; btnConnect.Click += BtnConnect_Click; // 绑定点击事件 Controls.Add(btnConnect); // 将按钮添加到表单中 } private void BtnConnect_Click(object sender, EventArgs e) { MessageBox.Show("已尝试建立连接..."); } } } ``` 此段代码展示了如何创建一个具有单一按钮的小型窗口应用程序,并为其定义了相应的行为逻辑——当用户按下该按钮时会弹出提示框显示消息。 #### 进一步学习方向 为了提高开发水平,建议深入了解以下几个领域: - **面向对象编程(OOP)** 的基础知识,如类与对象的概念、继承关系的设计思路等[^3]; - 掌握更多高级特性,比如异步I/O模型、多线程技术的应用场景分析; - 学习特定行业的专用术语及其实现方式,例如工业控制中的PLC编程规范或是物联网(IoT)架构模式解析。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值