| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Markup;
- namespace ConfigureWindow
- {
- public class EnumerationExtension : MarkupExtension
- {
- private Type _enumType;
- public EnumerationExtension(Type enumType)
- {
- if (enumType == null)
- throw new ArgumentNullException("enumType");
- EnumType = enumType;
- }
- public Type EnumType
- {
- get { return _enumType; }
- private set
- {
- if (_enumType == value)
- return;
- var enumType = Nullable.GetUnderlyingType(value) ?? value;
- if (enumType.IsEnum == false)
- throw new ArgumentException("Type must be an Enum.");
- _enumType = value;
- }
- }
- public override object ProvideValue(IServiceProvider serviceProvider)
- {
- var enumValues = Enum.GetValues(EnumType);
- return (
- from object enumValue in enumValues
- select new EnumerationMember
- {
- Value = enumValue,
- Description = GetDescription(enumValue)
- }).ToArray();
- }
- private string GetDescription(object enumValue)
- {
- var descriptionAttribute = EnumType
- .GetField(enumValue.ToString())
- .GetCustomAttributes(typeof(DescriptionAttribute), false)
- .FirstOrDefault() as DescriptionAttribute;
- return descriptionAttribute != null
- ? descriptionAttribute.Description
- : enumValue.ToString();
- }
- public class EnumerationMember
- {
- public string Description { get; set; }
- public object Value { get; set; }
- }
- }
- }
|