using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Data; namespace ThickTcpUiInWindow.Converter { public class RatioConverter: IMultiValueConverter { #region IMultiValueConverter 成员 public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (values.Length == 3 && (values[0] is int) && (values[1] is int) && (values[2] is double))//必须要检查,不然 界面生成器 会错误,提示转换异常 { double ratio ; int value = (int)values[0]; if (value == 99999998) value = 0; int max = (int)values[1]; double ActualWidth = (double)values[2]; if(max <=0) ratio = 0; else ratio = (double)value / max; if (ratio < 0) ratio = 0; else if (ratio > 1) ratio = 1; return ActualWidth * ratio; } else { return 100; } } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) { return null; } #endregion } public class RatioConverter_TimeSpan : IMultiValueConverter { #region IMultiValueConverter 成员 public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (values.Length == 3 && (values[0] is TimeSpan) && (values[1] is TimeSpan) && (values[2] is double))//必须要检查,不然 界面生成器 会错误,提示转换异常 { double ratio; TimeSpan v = (TimeSpan)values[0]; TimeSpan max = (TimeSpan)values[1]; double ActualWidth = (double)values[2]; if (max.TotalSeconds <= 0) ratio = 0; else ratio = v.TotalSeconds / max.TotalSeconds; if (ratio < 0) ratio = 0; else if (ratio > 1) ratio = 1; return ActualWidth * ratio; } else { return 100; } } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) { return null; } #endregion } }