ValueConverter.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. using System;
  2. using System.ComponentModel;
  3. using System.Globalization;
  4. using System.Windows;
  5. using System.Windows.Controls;
  6. using System.Windows.Data;
  7. namespace FWindSoft.Wpf
  8. {
  9. /// <summary>
  10. /// 枚举类型转换器
  11. /// </summary>
  12. [ValueConversion(typeof(bool), typeof(Enum))]
  13. public class EnumBoolConverter : IValueConverter
  14. {
  15. public static IValueConverter Instance=new EnumBoolConverter();
  16. public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  17. {
  18. object returnValue = false;
  19. if (Enum.IsDefined(value.GetType(), value))
  20. {
  21. Object paramValue = Enum.Parse(value.GetType(), parameter.ToString(), true);
  22. returnValue = paramValue.Equals(value);
  23. }
  24. return returnValue;
  25. }
  26. public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
  27. {
  28. return Enum.Parse(targetType, parameter.ToString(), true);
  29. }
  30. }
  31. /// <summary>
  32. /// 布尔类型相反转换
  33. /// </summary>
  34. [ValueConversion(typeof (bool), typeof (bool))]
  35. public class BooleanOppositionConverter : IValueConverter
  36. {
  37. public static IValueConverter Instance = new BooleanOppositionConverter();
  38. public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  39. {
  40. if (value == null)
  41. return true;
  42. var isbool = (bool) value;
  43. return !isbool;
  44. }
  45. public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
  46. {
  47. if (value == null)
  48. return true;
  49. var isbool = (bool) value;
  50. return !isbool;
  51. }
  52. }
  53. /// <summary>
  54. /// 布尔类型翻转对应可见性
  55. /// </summary>
  56. public class BooleanOppositionToVisibilityConverter : IValueConverter
  57. {
  58. public static IValueConverter Instance = new BooleanOppositionToVisibilityConverter();
  59. private BooleanToVisibilityConverter m_tempConvert;
  60. public BooleanOppositionToVisibilityConverter()
  61. {
  62. m_tempConvert = new BooleanToVisibilityConverter();
  63. }
  64. public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  65. {
  66. return m_tempConvert.Convert(!(System.Convert.ToBoolean(value)), targetType, parameter, culture);
  67. }
  68. public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
  69. {
  70. return !(System.Convert.ToBoolean(m_tempConvert.ConvertBack(value, targetType, parameter, culture)));
  71. }
  72. }
  73. /// <summary>
  74. /// 多值转换
  75. /// </summary>
  76. public class MultiValueConverter : IMultiValueConverter
  77. {
  78. public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
  79. {
  80. return values;
  81. }
  82. public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
  83. {
  84. if (value.GetType().IsArray)
  85. return (object[])value;
  86. else
  87. {
  88. throw new Exception("转换失败");
  89. }
  90. }
  91. }
  92. /// <summary>
  93. /// 特殊长度转换GridtoDataGrid
  94. /// </summary>
  95. public class DoubleToDgLengthConvert : IValueConverter
  96. {
  97. public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  98. {
  99. if (targetType != typeof(DataGridLength))
  100. throw new ArgumentException("目标类型必须是DataGridLength类型");
  101. if (value.GetType() != typeof(GridLength))
  102. throw new ArgumentException("转换参数必须是GridLength类型");
  103. return new DataGridLength(System.Convert.ToDouble(((GridLength)value).Value)); ;
  104. }
  105. public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
  106. {
  107. //if (targetType != typeof(bool))
  108. // throw new ArgumentException("目标类型必须是bool类型");
  109. //if (value.GetType() != typeof(bool))
  110. // throw new ArgumentException("转换参数必须是bool类型");
  111. //return !(bool)value;
  112. return 10d;
  113. }
  114. }
  115. }