自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

ASP.NET控件開發(fā)基礎(chǔ)之為子控件添加樣式

開發(fā) 后端
ASP.NET控件開發(fā)基礎(chǔ)之為子控件添加樣式是在理解理解了自定義視圖狀態(tài)管理之后,那么了解起來這個就要簡單的多,那么為子控件添加樣式是如何操作的呢?讓我們來了解一下。

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

ASP.NET控件開發(fā)基礎(chǔ)之為子控件添加樣式1.復(fù)合控件中樣式屬性概述

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

當(dāng)然復(fù)合控件可以適當(dāng)?shù)亩x其自身的樣式屬性,同時你還需要為其子控件提供樣式,典型的控件如GridView控件,如下圖

GridView控件 

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

我們可以用此方法為復(fù)合控件的子控件定義樣式,實現(xiàn)每個子控件對應(yīng)Style類型的復(fù)雜樣式屬性,將樣式屬性暴露為復(fù)合控件的***屬性,這樣更容易管理復(fù)合控件樣式屬性.

ASP.NET控件開發(fā)基礎(chǔ)之為子控件添加樣式2.復(fù)合控件中樣式屬性實現(xiàn)(為子控件提供樣式)

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

  1. protected override Style CreateControlStyle()  
  2. {  
  3.  
  4.     return new Style(ViewState);  

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

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

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

如下代碼

  1. #region 樣式屬性  
  2.       [  
  3.       Category("Styles"),  
  4.       DefaultValue(null),  
  5.       DesignerSerializationVisibility(  
  6.           DesignerSerializationVisibility.Content),  
  7.       PersistenceMode(PersistenceMode.InnerProperty),  
  8.       Description(  
  9.           "應(yīng)用于按鈕的樣式")  
  10.       ]  
  11.       public virtual Style ButtonStyle  
  12.       {  
  13.           get 
  14.           {  
  15.               if (_buttonStyle == null)  
  16.               {  
  17.                   _buttonStyle = new Style();  
  18.                   if (IsTrackingViewState)  
  19.                   {  
  20.                       ((IStateManager)_buttonStyle).TrackViewState();  
  21.                   }  
  22.               }  
  23.               return _buttonStyle;  
  24.           }  
  25.       }  
  26.  
  27.       [  
  28.       Category("Styles"),  
  29.       DefaultValue(null),  
  30.       DesignerSerializationVisibility(  
  31.           DesignerSerializationVisibility.Content),  
  32.       PersistenceMode(PersistenceMode.InnerProperty),  
  33.       Description(  
  34.           "應(yīng)用于文本框的樣式")  
  35.       ]  
  36.       public virtual Style TextBoxStyle  
  37.       {  
  38.           get 
  39.           {  
  40.               if (_textBoxStyle == null)  
  41.               {  
  42.                   _textBoxStyle = new Style();  
  43.                   if (IsTrackingViewState)  
  44.                   {  
  45.                       ((IStateManager)_textBoxStyle).TrackViewState();  
  46.                   }  
  47.               }  
  48.               return _textBoxStyle;  
  49.           }  
  50.       }  
  51.       #endregion 

(2)自定義視圖狀態(tài)管理

因為此處定義了兩個樣式集合屬性,所以用到了Triplet這個輔助類,其跟Pair類一樣都是輔助類,而其可以存儲三個相關(guān)對象的基本結(jié)構(gòu).如果你要儲存三個以上就不能用這兩個輔助類了,實現(xiàn)方法還是很簡單的.

如下代碼

  1. #region 自定義視圖狀態(tài)  
  2.  protected override void LoadViewState(object savedState)  
  3.  {  
  4.      if (savedState == null)  
  5.      {  
  6.          base.LoadViewState(null);  
  7.          return;  
  8.      }  
  9.      else 
  10.      {  
  11.          Triplet t = savedState as Triplet;  
  12.  
  13.          if (t != null)  
  14.          {  
  15.              base.LoadViewState(t.First);  
  16.  
  17.              if ((t.Second) != null)  
  18.              {  
  19.                  ((IStateManager)ButtonStyle).LoadViewState(t.Second);  
  20.              }  
  21.  
  22.              if ((t.Third) != null)  
  23.              {  
  24.                  ((IStateManager)TextBoxStyle).LoadViewState(t.Third);  
  25.              }  
  26.          }  
  27.          else 
  28.          {  
  29.              throw new ArgumentException("Invalid view state .");  
  30.          }  
  31.      }  
  32.  }  
  33.  
  34.  protected override object SaveViewState()  
  35.  {  
  36.      object baseState = base.SaveViewState();  
  37.      object buttonStyleState = null;  
  38.      object textBoxStyleState = null;  
  39.  
  40.      if (_buttonStyle != null)  
  41.      {  
  42.          buttonStyleState =  
  43.              ((IStateManager)_buttonStyle).SaveViewState();  
  44.      }  
  45.  
  46.      if (_textBoxStyle != null)  
  47.      {  
  48.          textBoxStyleState =  
  49.              ((IStateManager)_textBoxStyle).SaveViewState();  
  50.      }  
  51.  
  52.      return new Triplet(baseState,  
  53.          buttonStyleState, textBoxStyleState);  
  54.  
  55.  }  
  56.  
  57.  protected override void TrackViewState()  
  58.  {  
  59.      base.TrackViewState();  
  60.      if (_buttonStyle != null)  
  61.      {  
  62.          ((IStateManager)_buttonStyle).TrackViewState();  
  63.      }  
  64.      if (_textBoxStyle != null)  
  65.      {  
  66.          ((IStateManager)_textBoxStyle).TrackViewState();  
  67.      }  
  68.  }  
  69.  #endregion 

(3)為子控件添加樣式集合屬性

上面工作做好后,然后你就可以在呈現(xiàn)方法Render方法或RenderContent方法中為子控件添加樣式集合屬性,如下代碼

  1. if (_buttonStyle != null)  
  2.             {  
  3.                 submitButton.ApplyStyle(ButtonStyle);  
  4.             }  
  5.  
  6.             if (_textBoxStyle != null)  
  7.             {  
  8.                 nameTextBox.ApplyStyle(TextBoxStyle);  
  9.                 emailTextBox.ApplyStyle(TextBoxStyle);  
  10.             } 

來看一下效果,屬性面板已經(jīng)有子控件樣式集合屬性了,這樣就更容易管理樣式了.

子控件樣式集合屬性 

定義子控件樣式就這么的簡單,主要難點還是在于自定義視圖狀態(tài)管理,對自定義視圖狀態(tài)管理熟悉的話,看到這里肯定很簡單,如果沒看明白就須先弄懂如何自定義視圖狀態(tài)管理.

注意點:ASP.NET中復(fù)合控件可以直接繼承CompositeControl類即可,大家可以了解一下此類。

ASP.NET控件開發(fā)基礎(chǔ)之為子控件添加樣式的基本情況就向你介紹到這里,希望你對ASP.NET控件開發(fā)基礎(chǔ)之為子控件添加樣式有所了解。

【編輯推薦】

  1. ASP.NET控件開發(fā)基礎(chǔ)之復(fù)合控件淺析
  2. ASP.NET控件開發(fā)基礎(chǔ)之復(fù)合控件事件處理淺析
  3. ASP.NET控件開發(fā)基礎(chǔ)之類型轉(zhuǎn)換器淺析
  4. ASP.NET控件開發(fā)基礎(chǔ)之實現(xiàn)控件集合屬性
  5. ASP.NET控件開發(fā)基礎(chǔ)之自定義視圖狀態(tài)管理
責(zé)任編輯:仲衡 來源: 博客園
相關(guān)推薦

2009-08-06 17:52:45

ASP.NET控件開發(fā)自定義控件

2009-08-06 18:18:27

ASP.NET控件開發(fā)ASP.NET復(fù)合控件

2009-08-07 10:34:56

ASP.NET控件開發(fā)

2009-08-04 10:43:59

ASP.NET控件開發(fā)

2009-08-07 14:42:02

ASP.NET控件開發(fā)

2009-08-06 09:18:01

ASP.NET自定義控ASP.NET控件開發(fā)

2009-08-06 18:32:00

ASP.NET控件開發(fā)ASP.NET復(fù)合控件

2009-08-07 15:24:16

ASP.NET模板控件

2009-08-06 13:08:23

ASP.NET控件開發(fā)

2009-07-30 16:52:38

復(fù)合控件ASP.NET服務(wù)器控

2009-08-07 14:05:21

ASP.NET控件

2009-08-07 15:34:15

ASP.NET數(shù)據(jù)綁定

2009-08-07 13:56:46

ASP.NET控件開發(fā)

2009-08-19 13:44:00

ASP.NET Lis

2009-07-29 13:50:26

UpdatePanelASP.NET

2009-08-05 15:57:03

ASP.NET控件ID

2009-08-17 09:24:25

ASP.NET控件

2009-07-27 13:52:36

Panel控件ASP.NET

2009-07-27 16:19:59

ASP.NET報表控件

2009-08-03 15:08:00

SqlDataSour
點贊
收藏

51CTO技術(shù)棧公眾號