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;