LimitStateToColorConverter.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using SWRIS.Enums;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Globalization;
  5. using System.IO.Ports;
  6. using System.Windows.Data;
  7. using System.Windows.Media;
  8. namespace SWRIS.Converters
  9. {
  10. public class LimitStateToColorConverter : IValueConverter
  11. {
  12. private static readonly Dictionary<string, SolidColorBrush> _brushCache = new Dictionary<string, SolidColorBrush>();
  13. public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  14. {
  15. if (value is LimitState limit)
  16. {
  17. double opacity = parameter != null ? System.Convert.ToDouble(parameter) : 1;
  18. string cacheKey = $"{limit}_{opacity}";
  19. // 如果缓存中存在,直接返回
  20. if (_brushCache.TryGetValue(cacheKey, out var cachedBrush))
  21. {
  22. return cachedBrush;
  23. }
  24. SolidColorBrush colorBrush;
  25. switch (limit)
  26. {
  27. case LimitState.Offline:
  28. colorBrush = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#7886B2"));
  29. break;
  30. case LimitState.NotInLimit:
  31. colorBrush = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#00FF78"));
  32. break;
  33. case LimitState.AtLimit:
  34. colorBrush = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FF0000"));
  35. break;
  36. default:
  37. colorBrush = Brushes.Transparent;
  38. break;
  39. }
  40. colorBrush.Opacity = opacity;
  41. colorBrush.Freeze();
  42. _brushCache[cacheKey] = colorBrush;
  43. return colorBrush;
  44. }
  45. return Brushes.Transparent;
  46. }
  47. public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
  48. {
  49. return value is bool b ? !b : value;
  50. }
  51. }
  52. }