using System; using System.ComponentModel; using System.Globalization; using System.Windows; using System.Windows.Controls; using System.Windows.Data; namespace FWindSoft.Wpf { /// /// 枚举类型转换器 /// [ValueConversion(typeof(bool), typeof(Enum))] public class EnumBoolConverter : IValueConverter { public static IValueConverter Instance=new EnumBoolConverter(); public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { object returnValue = false; if (Enum.IsDefined(value.GetType(), value)) { Object paramValue = Enum.Parse(value.GetType(), parameter.ToString(), true); returnValue = paramValue.Equals(value); } return returnValue; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return Enum.Parse(targetType, parameter.ToString(), true); } } /// /// 布尔类型相反转换 /// [ValueConversion(typeof (bool), typeof (bool))] public class BooleanOppositionConverter : IValueConverter { public static IValueConverter Instance = new BooleanOppositionConverter(); public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (value == null) return true; var isbool = (bool) value; return !isbool; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { if (value == null) return true; var isbool = (bool) value; return !isbool; } } /// /// 布尔类型翻转对应可见性 /// public class BooleanOppositionToVisibilityConverter : IValueConverter { public static IValueConverter Instance = new BooleanOppositionToVisibilityConverter(); private BooleanToVisibilityConverter m_tempConvert; public BooleanOppositionToVisibilityConverter() { m_tempConvert = new BooleanToVisibilityConverter(); } public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return m_tempConvert.Convert(!(System.Convert.ToBoolean(value)), targetType, parameter, culture); } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return !(System.Convert.ToBoolean(m_tempConvert.ConvertBack(value, targetType, parameter, culture))); } } /// /// 多值转换 /// public class MultiValueConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { return values; } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) { if (value.GetType().IsArray) return (object[])value; else { throw new Exception("转换失败"); } } } /// /// 特殊长度转换GridtoDataGrid /// public class DoubleToDgLengthConvert : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (targetType != typeof(DataGridLength)) throw new ArgumentException("目标类型必须是DataGridLength类型"); if (value.GetType() != typeof(GridLength)) throw new ArgumentException("转换参数必须是GridLength类型"); return new DataGridLength(System.Convert.ToDouble(((GridLength)value).Value)); ; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { //if (targetType != typeof(bool)) // throw new ArgumentException("目标类型必须是bool类型"); //if (value.GetType() != typeof(bool)) // throw new ArgumentException("转换参数必须是bool类型"); //return !(bool)value; return 10d; } } }