群友提问:C#中的指示灯怎么做,改变状态有什么好的方法吗?

制作指示灯的方法有很多中:比如:

  1. 通过GDI+绘制自定义LED指示灯控件;

  2. 调用现成的第三方控件库;

  3. 采用label标签,通过改变背景色实现;等等

本文就以第三种方式展开讲解

01

实现效果

02

实现代码

前台代码:

添加两个按钮和一个标签:

<StackPanel><Border BorderBrush="Red"></Border><Button Name="StartBtn" Content="Start"/><Button Name="StopBtn" Content="Stop"/><Label Name="DisplayLbl" Visibility="{Binding DisplaySwitch}" FontSize="200"HorizontalAlignment="Center" VerticalAlignment="Center"Content="{Binding LabelText}" Foreground="{Binding ForeColor}" /></StackPanel>

后台代码:

①安装PropertyChanged.Fody,using PropertyChanged;然后在类前面添加   [AddINotifyPropertyChangedInterface],类中所有属性变更后就会自动通知界面变更;

②通过DisplaySwitch 属性控制指示灯的显示或者隐藏,然后通过界面的start按钮启动指示灯,stop关闭指示灯;

③指示灯背景色的改变通过独立线程控制,跨线程修改UI线程控件属性使用Caliburn.Micro框架下的  Execute.OnUIThread(()=>{});实现。

using PropertyChanged;
using System.Threading;
using System.Windows;
using System.Windows.Media;
using Brush = System.Windows.Media.Brush;namespace Caliburn.Micro.Hello
{[AddINotifyPropertyChangedInterface]public class IndicatorLightViewModel : IViewModel{public Visibility DisplaySwitch { get; set; } = Visibility.Hidden;public string LabelText { get; set; }public Brush ForeColor { get; set; }private Thread workTask;public IndicatorLightViewModel(){ForeColor = new SolidColorBrush(Color.FromRgb(255, 0, 0));}public void StartBtn(){DisplaySwitch = Visibility.Visible;LabelText = "●";if (workTask == null || !workTask.IsAlive){workTask = new Thread(IndicatorLightOperation);//添加线程 workTask.IsBackground = true;workTask.Start();}}public void StopBtn(){if (workTask == null || workTask.IsAlive){workTask.Abort();}DisplaySwitch = Visibility.Hidden;}public void IndicatorLightOperation(){while (true){Execute.OnUIThread(()=>{if (((SolidColorBrush)ForeColor).Color.Equals(Color.FromRgb(255, 0, 0))){ForeColor = new SolidColorBrush(Color.FromRgb(0, 255, 0));}else{ForeColor = new SolidColorBrush(Color.FromRgb(255, 0, 0));}});Thread.Sleep(500);}}}
}

03

其它相关:Brush颜色转换

1、String转换成ColorColor color = (Color)ColorConverter.ConvertFromString(string);2、String转换成BrushBrushConverter brushConverter = new BrushConverter();Brush brush = (Brush)brushConverter.ConvertFromString(string);3、Color转换成BrushBrush brush = new SolidColorBrush(color));4、Brush转换成Color有两种方法:(1)先将Brush转成string,再转成Color。Color color= (Color)ColorConverter.ConvertFromString(brush.ToString());(2)将Brush转成SolidColorBrush,再取Color。Color color= ((SolidColorBrush)CadColor.Background).Color;

C# 制作指示灯(经典)相关推荐

  1. Django网站实战——手把手带大家制作一个经典的网站

    一.前言 今天小编带大家制作一个经典的网站的案例,功能包括登录.注册.注销.改密.免密登录.忘记密码,那么下面就让我们开始吧. 二.创建项目并创建子应用 首先创建项目,然后在项目根目录下创建子应用,如 ...

  2. 优秀课程案例:使用Scratch制作扫雷经典版!

    点击上面微信号关注我关注我哟每天坚持推送文章,争取做到日更,喜欢的可以设置星标,并分享点赞我们的文章,非常感谢大家的支持,您的点击的在看就是我们的动力! 今天我们来分享一个扫雷经典版本.同时大家持续关 ...

  3. 用PowerBuilder制作指示灯

    用PowerBuilder制作指示灯 (加入日期:2001-4-13) [保存文章至硬盘][打印文章][字体:大中 小] 分享到: 0 相信大家在安装各种软件或微软公司产品时都会注意到那直观可爱的条状 ...

  4. python3小游戏代码教程_Python3制作仿“经典90坦克大战”小游戏|python3教程|python入门|python教程...

    https://www.xin3721.com/eschool/pythonxin3721/ 本文转载至知乎ID:Charles(白露未晞)知乎个人专栏 下载W3Cschool手机App,0基础随时随 ...

  5. Python3制作仿“经典90坦克大战”小游戏

    导语 本期我们将制作一个仿"经典90坦克大战"的小游戏.啊,想起来上一次玩这个游戏的时候才小学呢.T_T真是一款暴露年龄的游戏. 算了废话不多说,让我们愉快地开始吧~ 相关文件 百 ...

  6. 优秀课程案例:使用Scratch制作愤怒的小鸟经典版!

    点击上面微信号关注我关注我哟每天坚持推送文章,争取做到日更,喜欢的可以设置星标,并分享点赞我们的文章,非常感谢大家的支持,您的点击的在看就是我们的动力! 今天我们来分享一个愤怒的小鸟经典版版本.同时大 ...

  7. 收藏网站制作常用经典css.div.布局.设计实例打包下载

    点击下载:8好玩的导航菜单.动态感比较强lavalamp_0[1].1.0.rar 点击下载:box盒子-.rar 点击下载:cctv-鼠标滑过图片渐变效果.rar 点击下载:css-menu导航.r ...

  8. 浅谈游戏辅助程序的制作 【经典】

    0.前言 本文仅限于技术交流,文中所附数据纯属虚构,如有雷同,实在是巧合! 本文简单地探讨了一款游戏辅助程序的分析.制作方法,希望能对那些对此感兴趣的朋友们有些许帮助. 本人小菜鸟一只,水平有限,说得 ...

  9. pyqt5制作指示灯

    pyqt5使用Qt Designer创建指示灯 demo点我下载,传送门 1.打开Qt Designer 创建一个新的MainWindow 加入一个按钮.两个label.一个编辑器. 按钮的objec ...

最新文章

  1. 面试官: 讲讲 Spring 事务有哪些坑?
  2. 第三次学JAVA再学不好就吃翔(part48)--String类的判断功能
  3. 中国还有一个作家叫格非
  4. {}企业如何才能实现多方位网络营销
  5. python类的参数加self_python类参数self使用示例
  6. Codeforces Global Round 14 E. Phoenix and Computers 思维 + dp
  7. ios 语言本地化处理
  8. Linux学习(lesson1)
  9. QTP自动化测试从零基础到精通进阶(脚本测试、VBS语法、描述性编程、测试框架)...
  10. java.util.current_Java基础知识-java.util.concurrent包下常见类的使用
  11. AWVS Linux 破解版在 Centos7 下安装过程中存在问题记录
  12. 人力资源管理系统概要设计说明书
  13. 网课答案公众号查询方法
  14. NX/UG二次开发孔特征查找
  15. 进击的Objective-C-----------------类目(category),延展(Extension),协议(Protocol),代理(delegate)-委托 时间获取...
  16. java网络编程中Socket什么意思?怎么工作的?
  17. 演员改行做程序员?一男一女,这两个人你绝对想不到
  18. 【聚类算法】基于matlab划分法k-means聚类算法【含Matlab源码 1941期】
  19. 分布式系统:概念,优缺点,架构,路线,设计,原理,演变,主流框架,工具,可靠性,问题,技术联系,总结,定制
  20. pr里面怎么加css样式,放入pr剪辑中画面不全怎么办?

热门文章

  1. MySQL默认数据库简介
  2. hql Hibernate.gethibernatetemplate()
  3. Java开发者为最急需IT技术人才
  4. 在Win7中怎样打开摄像头?
  5. discuz!5.5.0安装方法及常见问题解决
  6. linux网卡固件名,修改CentOS7网卡名称为传统名称eth0格式
  7. 二叉树的建立与遍历_51、二叉树遍历-重建二叉树JZ4
  8. Navigator 对象,能够清楚地知道浏览器的相关信息
  9. 自定义常用input表单元素二:纯css实现自定义radio单选按钮
  10. Discuz X3.2源码解析 discuz_application类(转自百度)