首页 > 其他分享 >工控 上位机 WPF 跑马灯的实现

工控 上位机 WPF 跑马灯的实现

时间:2023-08-03 17:14:47浏览次数:41  
标签:Color 工控 cellBlock 跑马灯 Add cellBlockModels WPF public

工控 上位机 WPF 跑马灯的实现


 

工业控制软件中,跑马灯是主界面比不可少的组件。本文基于WPF技术,讲解如何实现高效的跑马灯组件。   跑马灯的效果如下图:

 

在讲解如何实现之前,我们先看一下,跑马灯组件在主界面上是如何使用的,请看如下代码:

                <Border Grid.Row="3">
                    <local:CellBlockList x:Name="cellBlockList" Margin="4"></local:CellBlockList>
                </Border>

CellBlockList 是一个用户控件,代码如下图:

 CellBlockList 用户控件中包含了9个 CellBlock 用户控件

        <local:CellBlock Grid.Column="0" x:Name="hrl1"></local:CellBlock>

 

 直接上 CellBlock.cs 代码

 1 namespace AOI
 2 {
 3     /// <summary>
 4     /// CellBlock.xaml 的交互逻辑
 5     /// </summary>
 6     public partial class CellBlock : UserControl
 7     {
 8         /// <summary>
 9         /// 设置 质量
10         /// </summary>
11         public string Quality
12         {
13             set
14             {
15                 lblQuality.Content = value;
16             }
17         }
18 
19         /// <summary>
20         /// 设置 颜色
21         /// </summary>
22         public string Color
23         {
24             set
25             {
26                 lblColor.Content = value;
27             }
28         }
29 
30         /// <summary>
31         /// 设置 Cell ID
32         /// </summary>
33         public string CellID
34         {
35             set
36             {
37                 lblCellID.Content = value;
38             }
39         }
40 
41         /// <summary>
42         /// 设置 背景颜色
43         /// </summary>
44         public string BgColor
45         {
46             set
47             {
48                 System.Drawing.Color bgColor = System.Drawing.Color.FromName(value);
49                 cellBlockBorder.Background = new SolidColorBrush(System.Windows.Media.Color.FromRgb(bgColor.R, bgColor.G, bgColor.B));
50             }
51         }
52 
53         public CellBlock()
54         {
55             InitializeComponent();
56         }
57 
58         public void SetValue(CellBlockViewModel model)
59         {
60             Quality = model.Quality;
61             Color = model.Color;
62             CellID = model.CellID;
63             BgColor = model.BgColor;
64         }
65     }
66 }

CellBlockList.cs 代码

 1 namespace AOI
 2 {
 3     /// <summary>
 4     /// CellBlockList.xaml 的交互逻辑
 5     /// </summary>
 6     public partial class CellBlockList : UserControl
 7     {
 8         private List<CellBlockViewModel> _cellBlockModels = new List<CellBlockViewModel>();
 9         /// <summary>
10         /// 跑马灯数量最大值
11         /// </summary>
12         private readonly int CellBlockMaxSize = 9;
13 
14         private List<CellBlock> _cellBlock = new List<CellBlock>();
15 
16         public CellBlockList()
17         {
18             InitializeComponent();
19             InitCellBlock();
20         }
21 
22         /// <summary>
23         /// 初始化跑马灯
24         /// </summary>
25         private void InitCellBlock()
26         {
27             _cellBlock.Add(hrl1);
28             _cellBlock.Add(hrl2);
29             _cellBlock.Add(hrl3);
30             _cellBlock.Add(hrl4);
31             _cellBlock.Add(hrl5);
32             _cellBlock.Add(hrl6);
33             _cellBlock.Add(hrl7);
34             _cellBlock.Add(hrl8);
35             _cellBlock.Add(hrl9);
36 
37             _cellBlockModels = new List<CellBlockViewModel>(9);
38             for (int i = 0; i < CellBlockMaxSize; i++)
39             {
40                 CellBlockViewModel model = new CellBlockViewModel()
41                 {
42                     Quality = string.Empty,
43                     Color = string.Empty,
44                     BgColor = "Gray",
45                     CellID = string.Empty
46                 };
47                 _cellBlockModels.Add(model);
48                 _cellBlock[i].SetValue(model);
49             }
50         }
51 
52         /// <summary>
53         /// 新增Cell到跑马灯
54         /// </summary>
55         /// <param name="cell"></param>
56         public void AddCellToHorseRaceLamp(Cell cell)
57         {
58             for (int i = _cellBlockModels.Count - 1; i > 0; i--)
59             {
60                 _cellBlockModels[i] = _cellBlockModels[i - 1];
61             }
62             _cellBlockModels[0] = GetCellBlockViewModel(cell);
63 
64             for (int i = 0; i < _cellBlockModels.Count; i++)
65             {
66                 _cellBlock[i].SetValue(_cellBlockModels[i]);
67             }
68         }
69 
70         private CellBlockViewModel GetCellBlockViewModel(Cell cell)
71         {
72             return new CellBlockViewModel
73             {
74                 CellID = cell.ID.Replace("\0", ""),
75                 Quality = cell.QualityName,
76                 Color = cell.Color,
77                 BgColor = cell.ColorName
78             };
79         }
80     }
81 }

 

主界面如何刷新跑马灯

软件内部在完成一个业务后(一个检测任务),调用如下代码即可:

            Dispatcher.Invoke(new Action(() =>
            {
                cellBlockList.AddCellToHorseRaceLamp(cell);
            }));        

 

 

标签:Color,工控,cellBlock,跑马灯,Add,cellBlockModels,WPF,public
From: https://www.cnblogs.com/bruceleeliya/p/17603819.html

相关文章

  • WPF svg转path(快速生成Path代码的方法)
    在使用WPF的Path作图时,我们可能会拿到美工出的一些比较复杂的图,今天查阅网上发现svg是可以自动转path的,特作记录。github:https://github.com/BerndK/SvgToXaml    设置途中项目为启动项目,然后点击svg图片 你是不是以为复制上面的M0,0一直到Z就OK了!那,我就不会写这篇......
  • WPF动态绑定隐藏或显示DataGrid一列
     因为datagridtemplatecolumn不在VirsualTree中,不能继承DataGrid的DataContext,所以想要绑定到datagridtemplatecolumn的visibility,需要添加一个代理 一、添加一個FrameworkElement的代理<Window.Resources><FrameworkElementx:Key="ProxyElement"DataContext......
  • 软路由3 卓凌工控 j6412
    配置j6412、双内存槽最大32x2=64g、4x2.5G网口、1xm2、1xsata价格202304、x宝、750、准系统有sata一体线、外置8寸风扇稳定性听说n5xx跑虚拟机有bug,又n100这代只能单个卡槽装32g,所以入j6412,内存也不太挑,鱼竿厂光威、玖合都可以。但是基本吃灰状态没怎么用,而且j64......
  • WPF使用FluentValidation进行表单验证
    WPF使用FluentValidation进行表单验证.net版本:6.0使用的NuGet包FluentValidation:11.6.0MaterialDesignThemes:4.9.0Prism.DryIoc:8.1.97在WPF里验证表单使用的是INotifyDataErrorInfo接口,这个接口长这样publicinterfaceINotifyDataErrorInfo{boolHasErrors{get;......
  • C#+WPF上位机开发(模块化+反应式)
    在上位机开发领域中,C#与C++两种语言是应用最多的两种开发语言,在C++语言中,与之搭配的前端框架通常以QT最为常用,而C#语言中,与之搭配的前端框架是Winform和WPF两种框架。今天我们主要讨论一下C#和WPF这一对组合在上位机开发过程中的实际应用。一、模块化概念开发一套完善的软件,离不开......
  • 2023-8-1 WPF的ItemsControl容器(DataGrid,ListBox,ListView等)可以实现的隔行样式修改
    实现的隔行样式修改【作者】长生微软官方文档详细介绍实现方式如果需要让你的wpf表格或者间隔样式实现下列效果可以使用AlternationCount首先添加一个DataGrid,并使用AlternatingRowBackground设置奇数行的背景色为紫色<DataGridAlternatingRowBackground="Purple"></Data......
  • WPF安装打包程序
    转载于:https://blog.csdn.net/Reborn214/article/details/127671649WPF程序打包1.在VisualStudio扩展中下载并安装MicrosoftVisualStudioInstallerProjects2022 2.以Release模式运行项目3.在解决方案中新建Setup项目 4.将项目工程Debug或者Release......
  • 记 一个 WPF 的 加载动画。
    最近写界面的过程中需要弄个加载动画,但是又没找到想要的轮子,就差不多胡乱弄了一个,用到了HandyControl的Arc控件,别的也没啥了。RatioConverter是自己随便写的一个转换器,算一下Border的中心点的位置。通过旋转最外层的Border和中间的Arc控件实现整个加载动画。这个是效果图: 最......
  • wpf在设计器模式利用模拟数据展现控件
    使用VisualStudio开发WPF应用程序时,控件显示需要的数据如果来路比较“苦难”,比如来自数据库,JSON文件,复杂计算等,这时候,如果想看到控件带有数据的展示效果,需要启动调试,这很麻烦。我们可以在XAML中使用designtime语法给控件赋予模拟数据MSDN教程,也可以在后台使用csharp代码判断当......
  • 如何使用 WPF 用户控件关闭父窗口
    HowtocloseparentwindowsusingWPFUserControl如何使用WPF用户控件关闭父窗口【问题描述】假设有两个WPF窗口:window1和window2。window1有一个按钮,单击此按钮将打开window2。window2包含一个用户控件。此用户控件有一个用于关闭window2的按钮。怎样才能实现这个场景......