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 { /// <summary> /// Window_graphfix.xaml 的交互逻辑 /// </summary> public partial class FixGraphConfig : FLY.ControlLibrary.WindowBigClose { private ObservableCollection<FixInterval> intervalopt = new ObservableCollection<FixInterval>(); public ObservableCollection<FixInterval> IntervalOpt { get{ return intervalopt; } } private ObservableCollection<int> datelenopt = new ObservableCollection<int>(); public ObservableCollection<int> 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 == "Interval") { updateDataLenOpt(); //刷新一下,不然会出错 int len = graphparam_clone.Len; graphparam_clone.Len = 10; graphparam_clone.Len = len; } else if(e.PropertyName == "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 = "1.28ms" }); IntervalOpt.Add(new FixInterval() { Interval = 4, Title = "5.12ms" }); 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(500); DataLenOpt.Add(1000); DataLenOpt.Add(2000); DataLenOpt.Add(4000); DataLenOpt.Add(10000); DataLenOpt.Add(20000); DataLenOpt.Add(50000); DataLenOpt.Add(100000); } else if (graphparam_clone.Interval <= 10) { DataLenOpt.Add(500); DataLenOpt.Add(1000); DataLenOpt.Add(2000); DataLenOpt.Add(4000); DataLenOpt.Add(10000); DataLenOpt.Add(20000); } else if (graphparam_clone.Interval <= 50) { DataLenOpt.Add(500); DataLenOpt.Add(1000); DataLenOpt.Add(2000); DataLenOpt.Add(4000); DataLenOpt.Add(10000); DataLenOpt.Add(20000); } else if (graphparam_clone.Interval <= 100) { DataLenOpt.Add(500); DataLenOpt.Add(1000); DataLenOpt.Add(2000); DataLenOpt.Add(4000); } else { DataLenOpt.Add(500); DataLenOpt.Add(1000); DataLenOpt.Add(2000); } //确保长度在 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; } } /// <summary> /// 时间间隔转换 ms 转 string /// </summary> 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(); } } /// <summary> /// 时间长度 转 string /// </summary> public class TimeLenConverter : IMultiValueConverter { #region IMultiValueConverter 成员 /// <summary> /// 参数0: int ms ; /// 参数1: int len /// </summary> /// <param name="values"></param> /// <param name="targetType"></param> /// <param name="parameter"></param> /// <param name="culture"></param> /// <returns></returns> 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; if (ms < 10) total_ms = (1.28 * ms) * len; else 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 } /// <summary> /// 数据量 转 文件大小 MB /// </summary> 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(); } } }