假设我想开发一个自定义的纯图形控件,用于 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
相关的课程来完成这个,但我不确定如何进行,以及它是否会给我我想要的结果。我意识到这只会对我的设计师有所帮助,但这很好。