【发布时间】:2011-03-10 03:54:56
【问题描述】:
如何编写自己的结构,在设计时用作属性?我需要能够指定一个默认值,并有一个可供设计人员从中选择的预定义结构的可选列表,这与实现 Color 属性的方式大致相同。
此外,我怎样才能像 Font 那样对类做到这一点?如何在属性窗口中指定子属性?
我正在编写一个自定义控件,它具有许多不同的视觉类型元素,例如渐变色、宽度、百分比等。我希望这些都可以自定义,但也可以全部设置为一次与不同的Styles。我可以在运行时通过创建Style 结构属性并让它更改设置器中的所有其他属性来做到这一点。我希望用户在设计时能够选择预定义的Styles,例如“浅蓝色”、“深灰色”等,每个都将设置所有其他 UI 属性(渐变、等等)如果我可以让所有 UI 属性出现在“样式”属性下,就像“粗体”和“斜体”出现在“字体”下一样,那将是理想的。
代码:
[Designer("System.Windows.Forms.Design.ParentControlDesigner, System.Design", typeof(IDesigner))]
public partial class GradientPanel : UserControl
{
public PanelStyle Style
{
get
{
return new PanelStyle()
{
BackgroundFade = this.BackgroundFade,
EdgeColor = this.EdgeColor,
BorderColor = this.BorderColor,
EdgeWidth = this.EdgeWidth,
LowerColor = this.LowerColor,
UpperColor = this.UpperColor
};
}
set
{
this.SuspendLayout();
this.BackgroundFade = value.BackgroundFade;
this.EdgeColor = value.EdgeColor;
this.BorderColor = value.BorderColor;
this.EdgeWidth = value.EdgeWidth;
this.LowerColor = value.LowerColor;
this.UpperColor = value.UpperColor;
this.ResumeLayout();
}
}
....
public struct PanelStyle
{
public float BackgroundFade;
public Color EdgeColor;
public int EdgeWidth;
public Color BorderColor;
public Color UpperColor;
public Color LowerColor;
public static PanelStyle System = new PanelStyle()
{
BackgroundFade = .7f,
EdgeColor = SystemColors.Window,
BorderColor = SystemColors.WindowFrame,
EdgeWidth = 6,
LowerColor = SystemColors.Control,
UpperColor = SystemColors.Window
};
}
}
【问题讨论】:
-
你能发布一些你希望你的代码如何处理这些结构的例子吗?
-
对于所有这些设计时的东西,我用过的最好的书是sellsbrothers.com/writing/wfbook,毫无疑问。很多关于如何做到这一点的说明,我无法在其他任何地方找到信息。自从我从事此类工作以来已经太久了,无法提供更好的建议。而且我记得发现它非常令人沮丧,即使有很多资源。
标签: c# .net properties