【问题标题】:Creating An Ambient Property That Inherits From a Parent's Property创建从父属性继承的环境属性
【发布时间】:2013-05-07 20:55:17
【问题描述】:

似乎无法弄清楚如何做到这一点。我有一个继承的控件:MyControl,带有一个名为 MyOtherFont 的属性。如何让 MyOtherFont 继承父控件的 Font 属性的环境值?

例如,如果我将此控件拖动到字体为 Segoe UI 的表单上,则从设计器那里,它应该从表单继承该值,而不是在属性窗口中将其显示为粗体。

谢谢

【问题讨论】:

    标签: c# .net vb.net winforms windows-forms-designer


    【解决方案1】:

    想通了。这是一个 C# 示例,它完全符合我的示例所描述的内容。希望这对某人有所帮助。

    public class MyControl : Control
    {
    
        private Font myOtherFont;
        public Font MyOtherFont
        {
            get
            {
                if (this.myOtherFont == null)
                {
                    if (base.Parent != null)
                        return base.Parent.Font;
                }
    
                return this.myOtherFont;
            }
            set
            {
                this.myOtherFont = value;
            }
        }
    
        private bool ShouldSerializeMyOtherFont()
        {
            if (base.Parent != null)
                if (base.Parent.Font.Equals(this.MyOtherFont))
                    return false;
    
            if (this.MyOtherFont == null)
                return false;
    
            return true;
        }
    
        private void ResetMyOtherFont()
        {
            if (base.Parent != null)
                this.MyOtherFont = base.Parent.Font;
            else
                this.MyOtherFont = Control.DefaultFont;
        }
    }
    

    【讨论】:

    • 这还不够,您还必须提供一种方法来重置属性,使其再次成为环境。 ResetMyOtherFont() 方法。并告诉设计师,[AmbientValue] 属性。
    • @HansPassant 我在那里有 ResetMyOtherFont 方法。不确定应该如何在该属性上使用该属性。有什么见解吗?
    • 第一次获取父字体时,您可能希望将继承的字体设置为基础字体,这样您就不必在每次访问时检查两个 if 语句了
    猜你喜欢
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多