123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- using NEIntelligentControl2.Models.Windturbine;
- using NEIntelligentControl2.Views.Basic;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- 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.Imaging;
- using System.Windows.Navigation;
- using System.Windows.Shapes;
- namespace NEIntelligentControl2.Views.Infos
- {
- /// <summary>
- /// 状态信息
- /// </summary>
- public partial class StateInfo : UserControl
- {
- public static readonly DependencyProperty ItemsSourceProperty = DependencyProperty.Register("ItemsSource", typeof(List<StatusTimeInfo>), typeof(StateInfo), new PropertyMetadata(ItemsSourceChanged));
- public static readonly DependencyProperty ItemsTitleProperty = DependencyProperty.Register("ItemsTitle", typeof(string), typeof(StateInfo), new PropertyMetadata(ItemsTitleChanged));
- /// <summary>
- /// 内容集合
- /// </summary>
- public List<StatusTimeInfo> ItemsSource { get => GetValue(ItemsSourceProperty) as List<StatusTimeInfo>; set => SetValue(ItemsSourceProperty, value); }
- public string ItemsTitle { get => GetValue(ItemsTitleProperty) as string; set => SetValue(ItemsTitleProperty, value); }
- /// <summary>
- /// 框选开始坐标
- /// </summary>
- private Point _StartPoint;
- /// <summary>
- /// 选择的时间
- /// </summary>
- private double _SelectedTime = 0;
- private bool _IsWidth;
- public StateInfo()
- {
- InitializeComponent();
- }
- private static void ItemsSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
- {
- var si = d as StateInfo;
- if (si == null) return;
- si.SetStateValue();
- }
- private static void ItemsTitleChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
- {
- var si = d as StateInfo;
- if (si == null) return;
- if (!string.IsNullOrWhiteSpace(e.NewValue as string))
- {
- si._tbtitle.Visibility = Visibility.Visible;
- }
- si._tbtitle.Text = e.NewValue as string;
- }
- /// <summary>
- /// 设置数值
- /// </summary>
- private void SetStateValue()
- {
- _SelectedTime = 0;
- _tb.Text = Math.Round(_SelectedTime, 2).ToString();
- _sp.Children.Clear();
- _IsWidth = this.ActualWidth == 0;
- double width = _IsWidth ? this.Width - 70 : _sp.ActualWidth;
- Console.WriteLine(width);
- var itemsSource = this.ItemsSource;
- if (itemsSource == null) return;
- double totalTime = itemsSource.Sum(i => i.Duration);
- foreach (var v in itemsSource)
- {
- StateInfoPoint sip = new StateInfoPoint(v) { TotalWidth = width, TotalTime = totalTime, SelectionChanged = ItemSelectionChanged };
- _sp.Children.Add(sip);
- }
- }
- private void ItemSelectionChanged(bool arg1, double arg2)
- {
- _SelectedTime = arg1 ? _SelectedTime + arg2 : _SelectedTime - arg2;
- _tb.Text = Math.Round(_SelectedTime, 2).ToString();
- }
- private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
- {
- _StartPoint = e.GetPosition(sender as Grid);
- }
- private void Grid_MouseMove(object sender, MouseEventArgs e)
- {
- if (e.LeftButton != MouseButtonState.Pressed) return;
- var ct2 = sender as Grid;
- var ponit = e.GetPosition(ct2);
- if (_RTMain.Visibility != Visibility.Visible)
- {
- _RTMain.Visibility = Visibility.Visible;
- }
- Point p1 = new Point();
- p1.X = Math.Min(_StartPoint.X, ponit.X);
- p1.Y = Math.Min(_StartPoint.Y, ponit.Y);
- Point p2 = new Point();
- p2.X = Math.Max(_StartPoint.X, ponit.X);
- p2.Y = Math.Max(_StartPoint.Y, ponit.Y);
- _RTMain.Margin = new Thickness(p1.X, p1.Y, ct2.ActualWidth - p2.X, ct2.ActualHeight - p2.Y);
- if (_IsWidth)
- {
- p1.X -= 70;
- p2.X -= 70;
- }
- double d = 0;
- foreach (var v in _sp.Children)
- {
- var ct = v as StateInfoPoint;
- var left = ct.TranslatePoint(default(Point), _sp).X;
- var right = left + ct.ActualWidth;
- var b = right >= p1.X && left <= p2.X;
- if (Keyboard.Modifiers == ModifierKeys.Control)
- {
- if (b) ct.IsSelected = true;
- }
- else
- {
- ct.IsSelected = b;
- }
- if (ct.IsSelected)
- {
- d += ct.Time;
- }
- }
- _SelectedTime = d;
- _tb.Text = Math.Round(d, 2).ToString();
- }
- private void Grid_MouseLeave(object sender, MouseEventArgs e)
- {
- _RTMain.Visibility = Visibility.Hidden;
- }
- private void Grid_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
- {
- _RTMain.Visibility = Visibility.Hidden;
- }
- }
- }
|