using System; using System.Collections.Generic; using System.Linq; using System.Text; 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.Shapes; using System.ComponentModel; using System.Collections.ObjectModel; namespace FLY.Thick.Base.UI.UiModule { /// /// Window_graphfix.xaml 的交互逻辑 /// public partial class FixGraphConfig : FLY.ControlLibrary.WindowBigClose { private ObservableCollection intervalopt = new ObservableCollection(); public ObservableCollection IntervalOpt { get{ return intervalopt; } } private ObservableCollection datelenopt = new ObservableCollection(); public ObservableCollection DataLenOpt { get{ return datelenopt; } } FixGraphItemParam mGraphParam; FixGraphItemParam graphparam_clone = new FixGraphItemParam(); public FixGraphConfig() { InitializeComponent(); this.grid_null.DataContext = this; } public void Init(FixGraphItemParam graphparam) { mGraphParam = graphparam; mGraphParam.CopyTo(graphparam_clone); updateIntervalOpt(); updateDataLenOpt(); this.DataContext = graphparam_clone; this.graphparam_clone.PropertyChanged += new PropertyChangedEventHandler(graphparam_clone_PropertyChanged); } void graphparam_clone_PropertyChanged(object sender, PropertyChangedEventArgs e) { if (e.PropertyName == nameof(graphparam_clone.Interval)) { updateDataLenOpt(); //刷新一下,不然会出错 int len = graphparam_clone.Len; graphparam_clone.Len = 10; graphparam_clone.Len = len; } else if(e.PropertyName == nameof(graphparam_clone.IsADMode)) { graphparam_clone.IsAutoTarget = true; graphparam_clone.IsAutoY = false; if (graphparam_clone.IsADMode) graphparam_clone.YRange = 1000; else graphparam_clone.YRange = 5; } } void updateIntervalOpt() { IntervalOpt.Clear(); IntervalOpt.Add(new FixInterval() { Interval = 1, Title = "1ms" }); IntervalOpt.Add(new FixInterval() { Interval = 5, Title = "5ms" }); IntervalOpt.Add(new FixInterval() { Interval = 10, Title = "10ms" }); IntervalOpt.Add(new FixInterval() { Interval = 50, Title = "50ms" }); IntervalOpt.Add(new FixInterval() { Interval = 100, Title = "0.1s" }); IntervalOpt.Add(new FixInterval() { Interval = 1000, Title = "1s" }); //确保间隔在 intervalopt 内 if((from i in IntervalOpt where i.Interval == graphparam_clone.Interval select i).Count()==0) { graphparam_clone.Interval = IntervalOpt.First().Interval; } } void updateDataLenOpt() { DataLenOpt.Clear(); if (graphparam_clone.Interval == 1) { DataLenOpt.Add(5000);//5s DataLenOpt.Add(10000);//10s DataLenOpt.Add(20000);//20s DataLenOpt.Add(50000);//50s DataLenOpt.Add(100000);//100s } else if (graphparam_clone.Interval <= 5) { DataLenOpt.Add(1000);//5s DataLenOpt.Add(2000);//10s DataLenOpt.Add(5000);//25s DataLenOpt.Add(10000);//50s DataLenOpt.Add(20000);//100s DataLenOpt.Add(50000);//250s } else if (graphparam_clone.Interval <= 10) { DataLenOpt.Add(500);//5s DataLenOpt.Add(1000);//10s DataLenOpt.Add(2000);//20s DataLenOpt.Add(5000);//50s DataLenOpt.Add(10000);//100s DataLenOpt.Add(20000);//200s DataLenOpt.Add(50000);//500s } else if (graphparam_clone.Interval <= 50) { DataLenOpt.Add(500);//25s DataLenOpt.Add(1000);//50s DataLenOpt.Add(2000);//100s DataLenOpt.Add(5000);//250s DataLenOpt.Add(10000);//500s DataLenOpt.Add(20000);//16.6min } else if (graphparam_clone.Interval <= 100) { DataLenOpt.Add(500);//50s DataLenOpt.Add(1000);//100s DataLenOpt.Add(2000);//200s DataLenOpt.Add(5000);//500s DataLenOpt.Add(10000);//16.6min } else { DataLenOpt.Add(50);//50s DataLenOpt.Add(100);//100s DataLenOpt.Add(200);//200s DataLenOpt.Add(500);//500s DataLenOpt.Add(1000);//16.6min } //确保长度在 datalenopt 内 if (!DataLenOpt.Contains(graphparam_clone.Len)) { graphparam_clone.Len = DataLenOpt.First(); } } private void button_save_Click(object sender, RoutedEventArgs e) { if (!WdPassword.Authorize("GraphConfig")) return; graphparam_clone.CopyTo(mGraphParam); FixGraphParams.Current.Save(); } #region INotifyPropertyChanged 成员 public event PropertyChangedEventHandler PropertyChanged; protected void NotifyPropertyChanged(string propertyname) { if (PropertyChanged != null) { PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyname)); } } #endregion } public class FixInterval { public int Interval { set; get; } public string Title { set; get; } } /// /// 时间间隔转换 ms 转 string /// public class IntMsConverter : IValueConverter { #region IValueConverter 成员 public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { int ms = (int)value; if (ms < 10) return (1.28 * ms).ToString() + "ms"; else { if (ms >= 1000) { return (ms / 1000.0).ToString() + "s"; } else { return ms.ToString() + "ms"; } } } #endregion public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } } /// /// 时间长度 转 string /// public class TimeLenConverter : IMultiValueConverter { #region IMultiValueConverter 成员 /// /// 参数0: int ms ; /// 参数1: int len /// /// /// /// /// /// public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if ((values.Length == 2) && (values[0] is int) && (values[1] is int))//必须要检查,不然 界面生成器 会错误,提示转换异常 { int ms = (int)values[0]; int len = (int)values[1]; double total_ms; total_ms = ms *len; TimeSpan ts = TimeSpan.FromTicks((long)(TimeSpan.TicksPerMillisecond * total_ms)); return ts.TotalSeconds.ToString("F1") + "s"; //DateTime dt = new DateTime((long)(TimeSpan.TicksPerMillisecond * total_ms)); //return dt.ToString("HH:mm:ss"); } else { return "null"; } } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) { return null; } #endregion } /// /// 数据量 转 文件大小 MB /// public class TimeLen2FileSizeConverter : IValueConverter { #region IValueConverter 成员 public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { int len = (int)value; return len; } #endregion public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } } }