Closed. This question needs to be more focused。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。
                        
                        2年前关闭。
                                                                                            
                
        
是否可以为将始终使用的枚举类型而不是默认的EnumConverter编写自定义的EnumConverter

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

最佳答案

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

首先,我必须向我的枚举添加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);
        }
    }
}


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

关于c# - 是否可以编写一个自定义的EnumConverter而不是默认的EnumConverter来使用? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46329277/

10-11 02:00