【问题标题】:How does the Control class, provide the ForeColor, BackColor and Font default values?Control 类如何提供 ForeColor、BackColor 和 Font 默认值?
【发布时间】:2010-04-01 17:22:16
【问题描述】:

我知道component-model通过PropertyDescriptor的ShouldSerializeValue方法表示一个属性是否有默认值。

基本的 windows-forms Control 类,有一些属性,如 ForeColor、BackColor 和 Font,默认为与父级相同的值,但我找不到任何 TypeDescriptorPropertyDescriptor 提供这些默认值。 Control 类没有实现 ICustomTypeDescriptor,也没有 TypeDescriptionProviderAttribute。

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

谢谢!!!

【问题讨论】:

    标签: controls winforms propertydescriptor system.componentmodel


    【解决方案1】:

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

    在 Control 类中有一个 ShouldSerializeForeColor() 方法。它是内部的,不能被用户代码覆盖。其他属性也一样。使用 Reflector 或 .NET 参考源进行查看。

    MSDN Library 像这样记录它们:

    Windows 窗体控件使用环境 属性,以便子控件可以 看起来像他们的周围 环境。环境属性是 控制属性,如果未设置,则为 从父控件中检索。如果 控件没有父级, 并且该属性未设置,则 控制试图确定 环境属性的值通过 站点属性。如果控制是 未选址,如果该网站没有 支持环境属性,或者如果 属性未设置在 AmbientProperties,控件使用 它自己的默认值。通常,一个 环境属性代表一个 控件的特征,例如 BackColor,即传达给 儿童控制。例如,一个按钮 将具有与其相同的背景色 默认情况下为父窗体。周围的 控件提供的属性 类包括:光标,字体, BackColor、ForeColor 和 RightToLeft。

    【讨论】:

    • 是的!!!我刚刚确认组件模型使用名为ShouldSerialize + PropertyName 的方法来确定属性是否应该序列化。我永远也想不到!谢谢!
    猜你喜欢
    • 2016-11-09
    • 2015-12-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-03
    • 2020-05-04
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    相关资源
    最近更新 更多