程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> ASP.NET控件開發基礎(12)

ASP.NET控件開發基礎(12)

編輯:關於ASP.NET

上一篇討論了視圖狀態的用法,讓我們再回到第八篇的時候.從第八篇的時候跳了很大篇幅來繼續講屬性,然後接著講類型轉換器,再接著講視圖狀態.繞到現在才接著講復合控件的樣式的使用,因為上面講的東西是緊密聯系的.如果已經理解自定義視圖狀態管理,那這一篇則看起來相關的簡單.

1.復合控件中樣式屬性概述

在第六篇的時候已經介紹過樣式的使用了,在復合控件中你同樣可以用此方法給控件定義多個樣式屬性,但此方法很適合像label這樣非復合控件.

當然復合控件可以適當的定義其自身的樣式屬性,同時你還需要為其子控件提供樣式,典型的控件如GridView控件,如下圖

它有很多不同種類的列,而每種不同的列則有不同的樣式集合屬性,如果將其每個樣式屬性均暴露為頂級屬性,那樣式屬性將變得很混亂.

我們可以用此方法為復合控件的子控件定義樣式,實現每個子控件對應Style類型的復雜樣式屬性,將樣式屬性暴露為復合控件的頂級屬性,這樣更容易管理復合控件樣式屬性.

2.復合控件中樣式屬性實現(為子控件提供樣式)

Style類本身繼承IStateManager 接口,並實現了接口方法.在第五篇我們曾重寫CreateControlStyle方法,如下

protected override Style CreateControlStyle()
     {

       return new Style(ViewState);
     }

其初始化的時候即存儲樣式信息在視圖狀態中,而其自定義的樣式的狀態管理機制則跟上一篇非常的相似.你需要重寫Control類的狀態管理的幾個方法來實現樣式的狀態管理.還是以登錄控件為例.

(1)先自定義樣式集合屬性

定義方法跟上一篇視圖狀態中的Address屬性很相似

如下代碼

樣式屬性#region 樣式屬性
     [
     Category("Styles"),
     DefaultValue(null),
     DesignerSerializationVisibility(
       DesignerSerializationVisibility.Content),
     PersistenceMode(PersistenceMode.InnerProperty),
     Description(
       "應用於按鈕的樣式")
     ]
     public virtual Style ButtonStyle
     {
       get
       {
         if (_buttonStyle == null)
         {
           _buttonStyle = new Style();
           if (IsTrackingViewState)
           {
             ((IStateManager)_buttonStyle).TrackViewState();
           }
         }
         return _buttonStyle;
       }
     }

     [
     Category("Styles"),
     DefaultValue(null),
     DesignerSerializationVisibility(
       DesignerSerializationVisibility.Content),
     PersistenceMode(PersistenceMode.InnerProperty),
     Description(
       "應用於文本框的樣式")
     ]
     public virtual Style TextBoxStyle
     {
       get
       {
         if (_textBoxStyle == null)
         {
           _textBoxStyle = new Style();
           if (IsTrackingViewState)
           {
             ((IStateManager)_textBoxStyle).TrackViewState();
           }
         }
         return _textBoxStyle;
       }
     }
     #endregion

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved