RiskLevelToColorConverter.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using SWRIS.Enums;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Globalization;
  5. using System.Windows.Data;
  6. using System.Windows.Media;
  7. namespace SWRIS.Converters
  8. {
  9. public class RiskLevelToColorConverter : IValueConverter
  10. {
  11. private static readonly Dictionary<string, SolidColorBrush> _brushCache = new Dictionary<string, SolidColorBrush>();
  12. public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  13. {
  14. if (value is RiskLevel risk)
  15. {
  16. double opacity = parameter != null ? System.Convert.ToDouble(parameter) : 1;
  17. string cacheKey = $"{risk}_{opacity}";
  18. // 如果缓存中存在,直接返回
  19. if (_brushCache.TryGetValue(cacheKey, out var cachedBrush))
  20. {
  21. return cachedBrush;
  22. }
  23. SolidColorBrush colorBrush;
  24. switch (risk)
  25. {
  26. case RiskLevel.Normal:
  27. case RiskLevel.Mild:
  28. colorBrush = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#00FF78"));
  29. break;
  30. case RiskLevel.Light:
  31. colorBrush = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FFF000"));
  32. break;
  33. case RiskLevel.Moderate:
  34. colorBrush = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FF9400"));
  35. break;
  36. case RiskLevel.Severe:
  37. colorBrush = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FF6C00"));
  38. break;
  39. case RiskLevel.Critical:
  40. colorBrush = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FF0000"));
  41. break;
  42. case RiskLevel.ExceededLimit:
  43. colorBrush = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FF008A"));
  44. break;
  45. default:
  46. colorBrush = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#00FF78"));
  47. break;
  48. }
  49. colorBrush.Opacity = opacity;
  50. colorBrush.Freeze();
  51. _brushCache[cacheKey] = colorBrush;
  52. return colorBrush;
  53. }
  54. return Brushes.Transparent;
  55. }
  56. public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
  57. {
  58. throw new NotImplementedException();
  59. }
  60. }
  61. }