是否可以编写将使用的自定义EnumConverter而不是默认的EnumConverter?

时间:2017-09-20 18:26:04

标签: c# wpf visual-studio xaml

是否可以为枚举类型编写自定义EnumConverter,而不是使用默认的EnumConverter?

我希望这个转换器可以在我的XAML代码中的任何地方使用,而无需指定要使用的转换器(如果可能): - )

1 个答案:

答案 0 :(得分:2)

我找到了如何执行此操作:-)这会将此类型的所有枚举转换为选定的字符串。

首先我必须在我的枚举中添加一个TypeConverter属性:

using System.ComponentModel;

namespace WpfTestTypeConverter
{
    [TypeConverter(typeof(DeviceTypeConverter))]
    public enum DeviceType
    {
        Computer,
        Car,
        Bike,
        Boat,
        TV
    }
}

我还必须编写一个基于EnumConverter类的转换器

using System;
using System.ComponentModel;
using System.Globalization;

namespace WpfTestTypeConverter
{
    public class DeviceTypeConverter : EnumConverter
    {
        public DeviceTypeConverter(Type type) : base(type)
        {
        }

        public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
        {
            return (destinationType == typeof(string));
        }

        public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
        {
            if (value is DeviceType)
            {
                DeviceType x = (DeviceType)value;

                switch (x)
                {
                    case DeviceType.Computer:
                        return "This is a computer";
                    case DeviceType.Car:
                        return "A big car";
                    case DeviceType.Bike:
                        return "My red bike";
                    case DeviceType.Boat:
                        return "Boat is a goat";
                    case DeviceType.TV:
                        return "Television";
                    default:
                        throw new NotImplementedException("{x} is not translated. Add it!!!");
                }
            }
            return base.ConvertFrom(context, culture, value);
        }
    }
}

这很有效。有人对此解决方案有任何意见吗?