Control类如何提供ForeColor,BackColor和Font默认值?

时间:2010-04-01 17:22:17

标签: controls winforms propertydescriptor system.componentmodel

我知道组件模型通过 PropertyDescriptor的ShouldSerializeValue方法来指示属性是否具有默认值。

基本窗口形式Control类,有一些属性,如 ForeColor,BackColor和Font ,默认为父级的相同值,但我找不到任何{{ 1}}或TypeDescriptor提供这些默认值。 Control类不实现ICustomTypeDescriptor,也没有TypeDescriptionProviderAttribute。

Control类如何指示应该序列化这些属性? 它在哪里为这些属性提供PropertyDescriptors?

感谢!!!

1 个答案:

答案 0 :(得分:2)

他们没有默认值。这些属性是“环境”属性。 Control类检测到它们已发生属性分配。如果从未发生过,它将使用Parent中的相应属性。这很好,它确保子控件使用与容器相同的颜色和字体。

Control类中有一个ShouldSerializeForeColor()方法。它是内部的,不能被用户代码覆盖。其他属性也是如此。看一下Reflector或.NET Reference Source。

MSDN Library将他们记录下来:

  

Windows窗体控件使用环境   属性,所以子控件可以   看起来像他们的周围   环境。环境属性是   控制属性,如果没有设置,是   从父控件中检索。如果   控件没有父级,   并且财产没有设定,   控制试图确定   环境属性的价值   网站属性。如果控件是   没有选址,如果网站没有   支持环境属性,或者如果支持   财产没有设置   AmbientProperties,控件使用   它自己的默认值。通常,一个   ambient属性表示   控制的特征,如   BackColor,传达给   儿童控制。例如,一个Button   将具有与其相同的BackColor   父表单默认情况下。周围   Control提供的属性   class include:Cursor,Font,   BackColor,ForeColor和RightToLeft。