logo

C#制作指示灯(经典)

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

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

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

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

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

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

01

实现效果

02

实现代码

前台代码:

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

< StackPanel> < BorderBorderBrush= "Red"> </ Border> < ButtonName= "StartBtn"Content= "Start"/> < ButtonName= "StopBtn"Content= "Stop"/> < LabelName= "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(=>{});实现。

usingPropertyChanged; usingSystem.Threading; usingSystem.Windows; usingSystem.Windows.Media; usingBrush = System.Windows.Media.Brush;

namespaceCaliburn.Micro.Hello{[ AddINotifyPropertyChangedInterface] publicclassIndicatorLightViewModel: IViewModel{publicVisibility DisplaySwitch { get; set; } = Visibility.Hidden; publicstringLabelText { get; set; }

publicBrush ForeColor { get; set; }

privateThread workTask; publicIndicatorLightViewModel( ) {ForeColor = newSolidColorBrush(Color.FromRgb( 255, 0, 0)); }publicvoidStartBtn( ) {DisplaySwitch = Visibility.Visible;LabelText = "●"; if(workTask == null|| !workTask.IsAlive) {workTask = newThread(IndicatorLightOperation); //添加线程 workTask.IsBackground = true; workTask.Start;}}publicvoidStopBtn( ) {if(workTask == null|| workTask.IsAlive) {workTask.Abort;}DisplaySwitch = Visibility.Hidden;}

publicvoidIndicatorLightOperation( ) {while( true) {Execute.OnUIThread(=>{if(((SolidColorBrush)ForeColor).Color.Equals(Color.FromRgb( 255, 0, 0))) {ForeColor = newSolidColorBrush(Color.FromRgb( 0, 255, 0)); }else{ForeColor = newSolidColorBrush(Color.FromRgb( 255, 0, 0)); }});Thread.Sleep( 500); }

}}}

03

其它相关:Brush颜色转换

1String转换成Color

Color color = (Color)ColorConverter.ConvertFromString( string);

2String转换成Brush

BrushConverter brushConverter = newBrushConverter; Brush brush = (Brush)brushConverter.ConvertFromString( string);

3、Color转换成Brush Brush brush = newSolidColorBrush(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;

上一篇:2022中国(烟台)电力设备状态检测与监测技术大会暨展览会 下一篇:十字轴万向联轴器@泰西十字轴伸缩万向联轴器结构
最新资讯