4 using System.Globalization;
7 namespace SiliconStudio.Presentation.ValueConverters
13 public class EnumValues : OneWayValueConverter<EnumValues>
16 public override object Convert(
object value, Type targetType,
object parameter, CultureInfo culture)
18 var enumType = value as Type;
24 enumType = Nullable.GetUnderlyingType(enumType);
25 if (enumType == null || !enumType.IsEnum)
28 var query = Enum.GetValues(enumType).Cast<object>();
30 if (enumType.GetCustomAttributes(typeof(FlagsAttribute),
false).Length > 0)
32 object enumZero = GetEnumZero(enumType);
33 if (Enum.IsDefined(enumType, enumZero))
35 query = query.Where(x => Equals(x, enumZero) ==
false);
39 return query.Distinct().ToArray();
42 private static object GetEnumZero(Type enumType)
45 throw new ArgumentNullException(
"enumType");
47 Type underlyingType = Enum.GetUnderlyingType(enumType);
49 if (underlyingType == null)
50 throw new ArgumentNullException(
"enumType");
52 if (underlyingType == typeof(byte))
53 return Enum.ToObject(enumType, (byte)0);
54 if (underlyingType == typeof(sbyte))
55 return Enum.ToObject(enumType, (sbyte)0);
56 if (underlyingType == typeof(
short))
57 return Enum.ToObject(enumType, (short)0);
58 if (underlyingType == typeof(ushort))
59 return Enum.ToObject(enumType, (ushort)0);
60 if (underlyingType == typeof(
int))
61 return Enum.ToObject(enumType, 0);
62 if (underlyingType == typeof(uint))
63 return Enum.ToObject(enumType, (uint)0);
64 if (underlyingType == typeof(
long))
65 return Enum.ToObject(enumType, (long)0);
66 if (underlyingType == typeof(ulong))
67 return Enum.ToObject(enumType, (ulong)0);
69 throw new ArgumentException(
string.Format(
"Unknown enum underlying type '{0}'", underlyingType.FullName));
This converter will convert a Type to an enumerable of Enum values, assuming the given type represent...
override object Convert(object value, Type targetType, object parameter, CultureInfo culture)