using NEIntelligentControl2.Models.AGC; using NEIntelligentControl2.Models.Datas; using NEIntelligentControl2.Models.Messages; using NEIntelligentControl2.Service.WebSocket; using SVGViewer.Models.Info; using SVGViewer.Views; using System; using System.Collections.Generic; using System.Linq; using System.Security.Policy; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace NEIntelligentControl2.Views.BoostStation { /// /// 升压站缩略图视图 /// public partial class ThumbnailView : UserControl { public static readonly DependencyProperty IsAlarmProperty = DependencyProperty.Register("IsAlarm", typeof(bool), typeof(ThumbnailView), new PropertyMetadata(IsAlarmChanged)); public bool IsAlarm { get => (bool)GetValue(IsAlarmProperty); set => SetValue(IsAlarmProperty, value); } public Action DoubleClicked { get; set; } private bool _IsLoaded; private ShapeInfo shapeInfo; private Dictionary customizeShapes; private WEBHelper _WEBHelper; private UrlManager _UrlManager; /// /// 数据地址 /// private string _Url = ""; private Dictionary> _TagInfos = new Dictionary>(); public ThumbnailView(ShapeInfo v, Dictionary customizeShapes) { InitializeComponent(); shapeInfo = v; this.customizeShapes = customizeShapes; _WEBHelper = App.ServiceProvider.GetService(typeof(WEBHelper)) as WEBHelper; _UrlManager = App.ServiceProvider.GetService(typeof(UrlManager)) as UrlManager; Init(); } private void Init() { var sv = new SVGCanvas(shapeInfo, customizeShapes, false); _vb.Child = sv; _TBTitle.Text = shapeInfo.Name; var taginfos = shapeInfo.GetAllTagInfos(); _TagInfos = taginfos.GroupBy(v => v.Tag).ToDictionary(v => v.Key, v => v.ToList()); var keys = string.Join(",", _TagInfos.Keys); _Url += $"{_UrlManager.DataServicePath}/ts/latest?keys={keys}"; } private static void IsAlarmChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (e.NewValue == e.OldValue) return; var tv = d as ThumbnailView; if ((bool)e.NewValue) { SolidColorBrush sb = new SolidColorBrush(); ColorAnimation ca = new ColorAnimation(); ca.From = Color.FromRgb(0xFF, 0x71, 0x71); ca.To = Color.FromRgb(0xDB, 0x33, 0x33); ca.AutoReverse = true; ca.RepeatBehavior = RepeatBehavior.Forever; ca.Duration = new Duration(TimeSpan.FromSeconds(0.5)); sb.BeginAnimation(SolidColorBrush.ColorProperty, ca); tv._bd.Background = sb; } else { tv._bd.Background = new SolidColorBrush(Color.FromRgb(0x2B, 0x77, 0xDC)); } } private void UserControl_Loaded(object sender, RoutedEventArgs e) { _IsLoaded = true; Task.Factory.StartNew(RefreshData); } private void UserControl_Unloaded(object sender, RoutedEventArgs e) { _IsLoaded = false; } private async void RefreshData() { while (_IsLoaded) { try { var vs = _WEBHelper.HttpGetJSON>(_Url); if (vs != null && vs.Count > 0) { Dispatcher?.Invoke(() => { foreach (var v in vs) { if (!_TagInfos.ContainsKey(v.Key)) continue; var tgs = _TagInfos[v.Key]; foreach (var tg in tgs) { tg.Value = v.Value.Value; } } }); } Console.WriteLine($"刷新:{shapeInfo.Id}"); } catch { } await Task.Delay(2000); } } private void UserControl_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { if (e.ClickCount < 2 || DoubleClicked == null) return; DoubleClicked.Invoke(shapeInfo.Id); } } }