3

我正在寻找一个属性编辑器的示例,例如:

public class ContainerClass
{
  public string ContainerName { get; set; }
  public List<ContainerBase> Containers { get; set; }

  public ContainerClasss()
  {
    Containers = new List<ContainerBase>();
  }
}

public class ContainerBase
{
  public string Name { get; set; }
  public string Description { get; set; }
  public string Material { get; set; }
  public float Area { get; set; }
}

public class Bookbag : ContainerBase
{
  public int Pockets { get; set; }

  public Bookbag()
  {
    Description = "Bookbag";
  }
}

public class Bookcase : ContainerBase
{
  public Color Color { get; set; }
  public int Shelves { get; set; }

  public Bookcase()
  {
    Description = "Bookcase";
  }   
}

当我单击 Containers 的 [...] 按钮时,[ADD] 按钮允许我添加不同类型的容器,而不是基本容器类...

4

1 回答 1

4

您可以使用自定义UITypeEditor属性来做到这一点:

public class ContainerClass
{
    ...
    [Editor(typeof(MyCollectionEditor), typeof(UITypeEditor))]
    public List<ContainerBase> Containers { get; set; }
    ...
}

使用此 UITypeEditor:

public sealed class MyCollectionEditor : CollectionEditor // need a reference to System.Design.dll
{
    public MyCollectionEditor(Type type)
        : base(type)
    {
    }

    protected override Type[] CreateNewItemTypes()
    {
        return new[] { typeof(ContainerBase), typeof(Bookbag), typeof(Bookcase) };
    }
}

这就是它的外观:

在此处输入图像描述

于 2013-08-02T13:26:42.743 回答