就是这个, ItemBuilderConverter,
终于搞明白这个 IComponent.Site是什么意思了。
public class ItemBuilderConverter : TypeConverter

{
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)

{
if (sourceType == typeof (string))
return true;
return base.CanConvertFrom(context, sourceType);
}

public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)

{
if (destinationType == typeof (string))
return true;
return base.CanConvertTo(context, destinationType);
}

public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)

{
if (value == null || value.ToString() == string.Empty) return string.Empty;
object result = context.Container.Components[value.ToString()];
if (result != null)

{
return value.ToString();
}
return string.Empty;
}

public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)

{
if (destinationType == null) throw new Exception("目标类型为null");
if (value == null) return null;

return base.ConvertTo(context, culture, value, destinationType);
}
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)

{
return true;
}


public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)

{
IList list = new ArrayList();
IEnumerator itor = context.Container.Components.GetEnumerator();
while(itor.MoveNext())

{
object item = itor.Current;
if(item is IListsBuilder)

{
list.Add( ((IComponent)item).Site.Name );
}
}
if (list.Count > 0)

{
return new StandardValuesCollection(list);
}
return base.GetStandardValues(context);
}


}