.Text中的Advanced Panel學習筆記

來源:互聯網
上載者:User

.Text中的使用者文章管理介面是使用Advanced Panel的主要介面。Advanced Panel與普通WebPanel相比,多提供一個Header欄,並且可以不使用任何代碼實現摺疊[Collapsing]功能,這是該控制項最有特色的地方。

控制項常用屬性

1. Collapsible屬性

    該屬性為bool型,如果為true,該控制項會在右側顯示一個摺疊按鈕,用於顯示或隱藏Panel所包含的內容。否則不顯示按鈕,該控制項變為不可摺疊的panel。

2. Collapsed屬性

    該屬性為bool型,預設值為false,初始化時會顯示panel容器中的所有內容;如果為true,初始化時,panel容器中的內容不會顯示出來。如果為true,顯示效果如下:


[圖1]

圖中,只能看到Panel的Header,但看不到Panel具體內容,只有點擊右側的摺疊切換按鈕才可以看到。

3. LinkBeforeHeader屬性

    該屬性為bool型,預設值為false。如果為false,右面的摺疊按鈕會顯示在Header的右下方,效果2


[圖2]

    如果為true,則像圖1一樣顯示摺疊按鈕

4. HeaderText屬性

    該屬性為string型,用於設定Header標題的內容,例2中的HeaderText的值為Edit Post

5. LinkImageCollapsed屬性

    該屬性為string型,用於設定摺疊按鈕處於“摺疊”狀態的圖片路徑。

6. LinkImage屬性

    該屬性為string型,用於設定摺疊按鈕處於“展開”狀態的圖片路徑。

7. BodyCssClass屬性

    該屬性為string型,用於設定內容顯示區的樣式。注意,由於內容顯示區的實際上是一個div層,設定的樣式要符合<div>的屬性,不要出現不能設定的屬性。.Text中的BodyCssClass="Edit",設定如下:

   

div.Edit  {}{

    color: #333333;

    border-bottom: 1px solid #AAAAAA;

    margin-bottom: 8px;

    padding: 4px 12px;

    background: #f5f5f5;

}

當然你也可以設定一些其他屬性如border-top[上邊框], border-left [左邊框], border-right[右邊框]等。

8. DisplayHeader屬性

    該屬性為bool型,用於設定是否顯示Header欄

9. HeaderCssClass屬性

    該屬性為string型,用於設定Header的樣式。.Text中,HeaderCssClass="CollapsibleTitle",設定如下:
div.CollapsibleTitle {}{

    font-size: 105%;

    background: #E5E5E5;

    border-top: 1px solid #AAAAAA;

    border-bottom: 1px dashed #AAAAAA;

    font-weight: bold;

    color: #333333;

    width: auto;

    padding: 2px 12px;

    margin: 12px 0px 0px 0px;

    clear: left;

}

其中我們可以看到border-top: solid,即上邊框為實線,border-bottom: dashed,即下邊框為虛線。

控制項技術分析

1. Panel原理

    Panel本身其實就是一個div層,不管是VS內建的WebPanel還是Advanced Panel都是如此。

2. 摺疊效果實現

    摺疊按鈕是一個關鍵,在最後產生的html代碼中我們可以看到這樣的代碼:
<a id="Edit_Link" onclick="ToggleVisible('Edit_Contents','Edit_LinkImage','image/toggle_gray_up.gif','image/toggle_gray_down.gif'); return false;" href="#">

<img id="Edit_LinkImage" src="image/toggle_gray_down.gif" alt="" border="0" />

</a>

    超連結標籤中onclick被重載,一旦按鈕按下,調用ToggleVisible()函數。 讓我們來看看ToggleVisible函數的實現:
function ToggleVisible(targetID, imageID, linkImage, linkImageCollapsed)

{

    if (document.getElementById){

          target = document.getElementById(targetID);

          if (target.style.display == "none") {

              target.style.display = "";

          } else {

              target.style.display = "none";

          }

          

          if (linkImageCollapsed != "") {

              image = document.getElementById(imageID);

              if (target.style.display == "none") {

                  image.src = linkImageCollapsed;

              } else {

                  image.src = linkImage;

              }

          }

      }

}

其中,參數targetID指定內容顯示區的id,即div層的id,.Text中為Edit_Contents。參數imageID指定顯示出來的摺疊按鈕的圖片id。

該函數通過javascript中的getElementById獲得特定html元素的指標,從而控制相應的html元素。至於顯示和隱藏內容是通過修改html元素的style.display屬性實現的,當style.display="none"時,則不顯示,如果style.display="",則顯示。

其實,在本控制項中,ToggleVisible是動態裝載的,該函數放在uicontrols.js檔案中,通過重載Panel控制項的OnPreRender事件可以完成javascript的動態載入,具體方法可以見《ASP.NET伺服器控制項與組件開發》。裝載代碼如下:
protected override void OnPreRender(EventArgs e)

{    

    if (Collapsible){

                Page.RegisterClientScriptBlock(CLIENT_SCRIPT_KEY, 

                    Utilities.GetClientScriptInclude(CLIENT_SCRIPT_FILE));

            }

    base.OnPreRender(e);

}

其中,CLIENT_SCRIPT_KEY和CLIENT_SCRIPT_FILE為控制項內部定義的常量。

3. Collapsed屬性的實現

    Collapsed屬性如果為true,則一開始就不顯示內容區,該工作是通過重載Panel控制項的Render方法實現的,代碼如下:
if (Collapsed)

{                    

        _contents.Style.Add("display", "none");

    _image.ImageUrl = LinkImageCollapsed;

}

其中的_contents.Style.Add()為內容顯示層增加了style.display="none",這樣就可以在初始化時隱藏內容區。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.