2013-05-07 41 views
4

似乎無法弄清楚如何做到這一點。我有一個繼承控制:MyControl一個叫MyOtherFont財產。我如何獲得MyOtherFont繼承父控件的字體屬性的環境價值?創建環境屬性繼承從家長的物業

例如,從如果我拖累了該控件到窗體上,其中的字體的Segoe UI設計師,應該繼承的形式是價值,而不是顯示它在屬性窗口加粗。

感謝

回答

3

想通了。這是一個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; 
    } 
} 
+1

這是不夠的,你還必須給出一種方法來重置屬性,使它再次成爲環境。 ResetMyOtherFont()方法。並告訴設計師,[AmbientValue]屬性。 – 2013-05-07 21:42:03

+0

@HansPassant我在那裏有ResetMyOtherFont方法。不知道該屬性應該如何在該屬性上使用。任何見解? – test 2013-05-07 21:49:16

+0

當您第一次獲得父字體時,您可能需要將繼承的字體設置爲基礎,以便每次您希望訪問它時都沒有兩個if語句 – Sayse 2013-05-07 22:07:07