ASP.NET 2.0伺服器控制項之複合控制項樣式

來源:互聯網
上載者:User

為了設定複合控制項的外觀,複合控制項必須提供一些樣式屬性,尤其是針對子控制項的樣式屬性。在本文中,我們將重點介紹為複合控制項實現樣式屬性的兩種方法。

1、上傳部分樣式屬性

在為複合控制項實現樣式屬性之前,讀者應首先瞭解"樣式冒泡"的基本概念。樣式冒泡多用於實現複合控制項的樣式屬性。由於在複合控制項中包含多個子控制項,因此,這些子控制項的樣式屬性可能在一定情況下,幹擾複合控制項的樣式屬性,引起樣式屬性混亂。為了更加明確的定義複合控制項的樣式屬性,可以採取將子控制項的樣式屬性上傳為頂級樣式屬性的方法,這就是所謂的"樣式冒泡"。

通常情況下,開發人員可能面對兩種情況:一種是上傳子控制項中少數樣式屬性,另一種是上傳子控制項中所有樣式屬性。本小節只介紹針對第一種情況的實現方法,而另外一種將在後面一節中進行講解。

本節說明的這種實現樣式屬性的方法,其關鍵是通過為子控制項的Attributes指定鍵/值對,引入樣式屬性,由此將子控制項的樣式屬性上傳為複合控制項頂級屬性。為了方便讀者理解這一方法,下面列舉了一個典型應用。

在本樣本中,實現了一個複合控制項MyControl,其子控制項集合中包括一個Table控制項。當前,需要將Table子控制項的樣式屬性CellPadding和Border上傳為MyControl的頂級樣式屬性。具體原始碼如下所示。

public class MyControl : CompositeControl{
 // 相關代碼 ......
 // 定義初始值

 private int _cellPadding = 0;
 private int _border = 1;
 ......
 // 定義樣式屬性,它和Table控制項的樣式屬性CellPadding和Border類似
 public int CellPadding{
  get { return _cellPadding; }
  set { _cellPadding = value; }
  // 實現屬性Border
  public int Border{
   get { return _border; }
   set { _border = value; }
   ......
   // 重寫CreateChildControls方法
   protected override void CreateChildControls() {
    //相關代碼
    ......
    Table t = new Table(); //將前面定義的屬性添加到鍵/值對中
    t.AddAttributes.Add("CellPadding",_cellPadding.ToString());
    t.AddAttributes.Add("Border",_border.ToString());
    ......
   }
 }

以上代碼顯示了MyControl的一些關鍵原始碼,其重點在於說明實現部分樣式屬性冒泡的關鍵步驟。(1)初始化頂級樣式屬性的欄位,如果有必要可以定義初始值。(2)定義與需要升級的子控制項的樣式屬性相同名稱的屬性。上面的代碼中定義了屬性CellPadding和Border。(3)在子控制項的Attributes的鍵/值對中引入第2步中定義的屬性。

當設定MyControl中的樣式屬性CellPadding和Border的屬性值時,實際是設定Table子控制項的CellPadding和Border的屬性值。通過以上3個關鍵步驟就可實現樣式冒泡。

如果讀者仔細觀察可以發現,以上介紹的這種實現樣式冒泡的方法存在一些問題:一、這種方法只適用於升級子控制項中少數樣式屬性。如果需要將子控制項的所有樣式屬性都升級,而仍然使用這種方法,則實現起來非常繁瑣,容易產生錯誤。二、所實現的樣式屬性缺乏邏輯性和組織性。在某種情況下,例如,多個子控制項的同一樣式屬性都需要升級為頂級屬性,這時使用該方法將會引起混亂。

為瞭解決這些問題,下面介紹一種上傳子控制項全部樣式屬性的實現方法。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.