作为示例,我将引用Xamarin Forms中的Label
控件。它有一个名为FontSize
的属性,类型为double。
/// <summary>Gets the size of the font for the label.</summary>
/// <value>To be added.</value>
/// <remarks>To be added.</remarks>
[TypeConverter(typeof (FontSizeConverter))]
public double FontSize
{
get
{
return (double) this.GetValue(Label.FontSizeProperty);
}
set
{
this.SetValue(Label.FontSizeProperty, (object) value);
}
}
即使它只允许您在编写时加倍
<Label FontSize=""
它为您提供了一些选择(请参见下图),但实际上它接受枚举值和双精度值。
我以为是[TypeConverter(typeof (FontSizeConverter))]
才使这成为可能,但是当我创建具有相同属性的自定义属性时,并没有解决问题。
所以我想拥有一个类型为double,int,string或其他类型的自定义属性,但显示枚举中的一些预定义选项,这些类型将由类型转换器处理。
编辑:我的自定义TypeConverter
正常工作,但是问题在于:
Invalid value for property 'FontSize': 'XXSmall'
上显示错误,但仍可编译并正常运行答案 0 :(得分:2)
要使它适用于FontSize,要比将TypeConverter添加到主项目还要多一些。
Forms为设计器提供了一个特定的DLL,该DLL可以构建该列表,以便它可以显示所有可用的命名字体大小,而且不会引发错误
然后Forms将该DLL打包到所有不同目标https://github.com/xamarin/Xamarin.Forms/blob/master/.nuspec/Xamarin.Forms.nuspec#L137
的nuget包的Design目录中。Forms在Visual中也做类似的事情,因此它也可以在智能感知中显示这些