假设我想开发一个自定义的纯图形控件,可以在WinForms和ASP.NET中使用。控件将根据某些属性设置和相关规则渲染图像。
显然,我可以将WinForms版本的代码复制到ASP.NET版本,但这意味着如果发现错误或更改规则,我有两个版本需要更新。
我可以编写一个核心类,需要各种属性和规则,WinForms和ASP.NET控件类将有一个指向这个核心类的属性,如:
public class MyControlCore
{
// all properties and control rules
public void PaintTo(Graphics graphics)
{
// rendering of control
}
}
public class MyWinFormsControl: Control
{
public MyWinFormsControl(Control parent): base(parent)
{
CoreControl = new MyControlCore();
}
public MyControlCore CoreControl { get; private set; }
protected override OnPaint(object sender, PaintEventArgs e)
{
CoreControl.PaintTo(e.Graphics);
}
}
这会有效,但在属性网格中,我会得到一个包含自定义属性的属性CoreControl
。有没有办法让属性网格显示MyControlCore
属性,而不是具有子属性的CoreControl
属性?
我原以为我可以用TypeDescriptionProvider
和相关的类来完成这个,但是我不确定如何继续,如果它甚至会给我我想要的结果。我意识到这只会对设计师有所帮助,但那没关系。