是否可以为枚举类型编写自定义EnumConverter,而不是使用默认的EnumConverter?
我希望这个转换器可以在我的XAML代码中的任何地方使用,而无需指定要使用的转换器(如果可能): - )
答案 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);
}
}
}
这很有效。有人对此解决方案有任何意见吗?