2 赞同
25 收藏

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

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

  1. 通过GDI+绘制自定义LED指示灯控件;
  2. 调用现成的第三方控件库;
  3. 采用label标签,通过改变背景色实现;等等

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

C#10零基础教程分享(2022录制)

平心而论,C#易于上手,新手友好也是其一大亮点。如果你是编程小白,或想系统深入地快速掌握C#编程。本教程千万别错过。真的录制不易!反正我是免费分享啊,不要白不要惹!

本教程50个视频课时,主要包含C#语法基础,从零开始了解基于C#语言开发的工具、项目、以及核心语法。跟着实操,打击能了解C#是什么,能干什么,如何学习C#等。最终能独立完成基于C#语言的基本开发。

教程免费自取:

由于内容过多不便呈现, 需要视频教程和配套源码的小伙伴,可添加个人说明处号码 免费分享

也可直接点击下方卡片: 点击后可自动复制威芯号,并跳转到威芯。得辛苦大家自行搜索威芯号添加。内容已做打包,添加后直接发送注意查收!

xg.zhihu.com/plugin/6ae

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));
                        ForeColor = new SolidColorBrush(Color.FromRgb(255, 0, 0));
                Thread.Sleep(500);

03 其它相关:Brush颜色转换

1、String转换成Color
  Color color = (Color)ColorConverter.ConvertFromString(string);
2、String转换成Brush
   BrushConverter brushConverter = new BrushConverter();
   Brush brush = (Brush)brushConverter.ConvertFromString(string);
3、Color转换成Brush
    Brush 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;

文章内容转载公号dotNET编程大全,可联系侵删!

C#10零基础教程分享(2022录制)

平心而论,C#易于上手,新手友好也是其一大亮点。如果你是编程小白,或想系统深入地快速掌握C#编程。本教程千万别错过。真的录制不易!反正我是免费分享啊,不要白不要惹!

本教程50个视频课时,主要包含C#语法基础,从零开始了解基于C#语言开发的工具、项目、以及核心语法。跟着实操,打击能了解C#是什么,能干什么,如何学习C#等。最终能独立完成基于C#语言的基本开发。

教程免费自取:

由于内容过多不便呈现, 需要视频教程和配套源码的小伙伴,可添加个人说明处号码 免费分享

也可直接点击下方卡片: 点击后可自动复制威芯号,并跳转到威芯。得辛苦大家自行搜索威芯号添加。内容已做打包,添加后直接发送注意查收!

xg.zhihu.com/plugin/6ae

编辑于 2022-02-15 · 著作权归作者所有