wpf组态图相关技术

本文介绍了一种使用WPF技术构建的地铁能耗管理组态图,该图能够通过图形和标签来表示实际的设备状态,并将配置保存在XML中。程序根据XML数据动态在WPF界面上绘制图形,包括读取数据库中的图片和图片组信息,并提供了绘制图形和连线的代码示例。
摘要由CSDN通过智能技术生成

wpf组态图相关技术

1 此组态图主要是用于地铁能耗管理

组态图主要是能够通过图片或者lable等代表实际的控件(如电表等),且操作界面和visio相似,最终画完的图的xml保存在数据库中,其他程序读取xml,在程序当中画图,通过图来显示相关控件的状态以及数据的实时显示。

下图是组态图

2 在程序当中通过xml来画图,自己控制相关的状态变化和数据的显示


3 相关代码

3.1 组态图中涉及到实际的数据库中的表,地铁线站的,其中最主要的就是图片和图片组。下面是图片和图片组的建表代码

CREATE TABLE `WD_ImageGroup` (
  `groupid` int(11) NOT NULL AUTO_INCREMENT,
  `groupName` varchar(45) DEFAULT NULL,
  `instruction` varchar(1000) DEFAULT NULL,
  PRIMARY KEY (`groupid`)
)

CREATE TABLE `WD_Images` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `imageName` varchar(45) NOT NULL COMMENT '图片名',
  `imageType` varchar(45) NOT NULL COMMENT '图片类型',
  `instruction` varchar(1000) DEFAULT NULL COMMENT '图片的相关说明',
  `groupid` int(11) NOT NULL COMMENT '图片所在组',
  PRIMARY KEY (`id`)
)

3.2 程序当中根据xml画图的主要程序如下,在wpf中是在下面的容器中画图的:

 <ScrollViewer  Grid.Row="1" Grid.Column="1"  BorderBrush="Red" BorderThickness="2" HorizontalScrollBarVisibility="Auto" Name="sv1">
            <Viewbox  Name="lv"   >
                <Grid Name="dockPanel_Data" ></Grid>
            </Viewbox>
        </ScrollViewer>

xml的主要画图程序:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Xml.Linq;
using System.Xml;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Data;
using System.Xml.Linq;
using System.Windows.Controls;

namespace WPFUtilControl
{
     public class CommDraw
    {
        //读取xml中的数据,将节点保存在nodeTable中,将连线保存在lineTable中
        //画图控件命名标准:如果是数据库中的控件,那么在画图时控件的Name是:数据表+ID 如:东直门进线201表 Name:wd_meter11
         //Tag中如果有值的话,保存的是控件所在的表;线的命名规则:相连两个控件的id之间带上下划线:如wd_meter11_wd_meter12
        private DataTable nodeTable = new DataTable();
        private DataTable lineTable = new DataTable();
        private string Height, Width, Background;
        private void iniTables()
        {
            #region 初始化nodeTable
            nodeTable.Columns.Add("Name", Type.GetType("System.String"));
            //设备类型
            nodeTable.Columns.Add("Type", Type.GetType("System.String"));
            //控件类型
            nodeTable.Columns.Add("Table", Type.GetType("System.String"));
            nodeTable.Columns.Add("columnValue", Type.GetType("System.String"));

            nodeTable.Columns.Add("ControlType", Type.GetType("System.String"));
            nodeTable.Columns.Add("Height", Type.GetType("System.String"));
            nodeTable.Columns.Add("Width", Type.GetType("System.String"));
            nodeTable.Columns.Add("Left", Type.GetType("System.String"));
            nodeTable.Columns.Add("Top", Type.GetType("System.String"));
            nodeTable.Columns.Add("Place", Type.GetType("System.String"));
            nodeTable.Columns.Add("Color", Type.GetType("System.String"));
            nodeTable.Columns.Add("Text", Type.GetType("System.String"));
            nodeTable.Columns.Add("FontSize", Type.GetType("System.String"));
            nodeTable.Columns.Add("zIndex", Type.GetType("System.String"));
            nodeTable.Columns.Add("BorderThickness", Type.GetType("System.String"));
            #endregion
            #region 初始化lineTable
            lineTable.Columns.Add("SourceName", Type.GetType("System.String"));
            lineTable.Columns.Add("Linkname", Type.GetType("System.String"));
            lineTable.Columns.Add("Startname", Type.GetType("System.String"));
            lineTable.Columns.Add("EndName", Type.GetType("System.String"));
            lineTable.Columns.Add("Stroke", Type.GetType("System.String"));
            lineTable.Columns.Add("StrokeThickness", Type.GetType("System.String"));
            lineTable.Columns.Add("zIndex", Type.GetType("System.String"));
            #endregion
        }

        private void loadXML(XElement xelement)
        {

            XElement root = xelement;
            nodeTable.Clear();
            lineTable.Clear();
            if (root == null)
                return;
           XElement CommonXML = root.Elements("CommonInfo").First();
            Height = CommonXML.Element("Height").Value.ToString();
            Width = CommonXML.Element("Width").Value.ToString();
            Background = CommonXML.Element("Background").Value.ToStr

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值