| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- using SWRIS.Enums;
- using System;
- using System.Collections.Concurrent;
- using System.Collections.Generic;
- using System.Globalization;
- using System.Windows.Data;
- using System.Windows.Media;
- namespace SWRIS.Converters
- {
- public class RiskLevelToColorConverter : IValueConverter
- {
- // 预定义颜色(非冻结的Color结构,轻量)
- private static readonly Color NormalColor = Color.FromRgb(0x00, 0xFF, 0x78);
- private static readonly Color MildColor = Color.FromRgb(0x00, 0xFF, 0x78);
- private static readonly Color LightColor = Color.FromRgb(0xFF, 0xF0, 0x00);
- private static readonly Color ModerateColor = Color.FromRgb(0xFF, 0x94, 0x00);
- private static readonly Color SevereColor = Color.FromRgb(0xFF, 0x6C, 0x00);
- private static readonly Color CriticalColor = Color.FromRgb(0xFF, 0x00, 0x00);
- private static readonly Color ExceededLimitColor = Color.FromRgb(0xFF, 0x00, 0x8A);
- // 映射枚举到颜色
- private static readonly Dictionary<RiskLevel, Color> ColorMap = new Dictionary<RiskLevel, Color>
- {
- { RiskLevel.Normal, NormalColor },
- { RiskLevel.Mild, MildColor },
- { RiskLevel.Light, LightColor },
- { RiskLevel.Moderate, ModerateColor },
- { RiskLevel.Severe, SevereColor },
- { RiskLevel.Critical, CriticalColor },
- { RiskLevel.ExceededLimit, ExceededLimitColor }
- };
- // 缓存:键为 "risk_opacity",值为冻结的SolidColorBrush
- private static readonly ConcurrentDictionary<string, SolidColorBrush> _brushCache = new ConcurrentDictionary<string, SolidColorBrush>();
- public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
- {
- if (value is RiskLevel risk)
- {
- double opacity = 1.0;
- if (parameter != null)
- {
- // 尝试解析,若失败则使用默认1.0
- double.TryParse(parameter.ToString(), NumberStyles.Any, CultureInfo.InvariantCulture, out opacity);
- }
- // 构建缓存键
- string cacheKey = $"{risk}_{opacity:F2}"; // 保留两位小数避免浮点数精度问题
- // 如果缓存中存在,直接返回
- if (_brushCache.TryGetValue(cacheKey, out var cachedBrush))
- {
- return cachedBrush;
- }
- // 获取颜色
- if (!ColorMap.TryGetValue(risk, out var color))
- {
- color = NormalColor; // 默认
- }
- // 创建新画笔并设置透明度
- var brush = new SolidColorBrush(color);
- brush.Opacity = opacity;
- brush.Freeze(); // 冻结以便跨线程使用
- // 缓存
- _brushCache[cacheKey] = brush;
- return brush;
- }
- return Brushes.Transparent;
- }
- public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
- {
- throw new NotImplementedException();
- }
- }
- }
|