內容包裝器控制項

2021-09-05 16:04:22 字數 3836 閱讀 3195

asp.net 2.0 提供了master page 技術,可以把公共的頁面部分放在統一個master檔案中。提供了theme,可以把控制項統一的屬性樣式放在乙個skin檔案中。

在我們的ui層頁面開發過程中,會遇到這樣一種情況: 很多頁面塊的外圍內容一樣,如csdn論壇的首頁面(那乙個個的內容塊,都要統一的標題,邊框。可以將這些東東統一設定嗎?

本文就要介紹這樣乙個控制項,實現對頁面塊的包裝,對頁面塊的外圍裝飾。

基本思想:將外圍裝飾作為裝飾器的頭尾模板內容,放在skin檔案中。然後頁面中將需要裝飾的塊用裝飾器控間包圍,設定相應裝飾器的skinid即可。

控制項宣告如下,其中headertemplate,footertemplate模板內容寫在skin檔案中,contenttemplate在頁面中包圍要裝飾的塊。

demo.skin :

<%

@ register assembly

=net.webcontrols

"namespace=

"net.webcontrols

"tagprefix=

"net

"server

"skinid=

"main

">

此skin定義將包裝的內容 上面加兩條橫線,下面加一條橫線。

demo.aspx

<="

"runat="

server

"skinid="

main

">

<

contenttemplate

>

我被包裝了

<

asp:textbox runat

=server id

=textbox1

>

asp:textbox

>

contenttemplate

>

>

下面是這個控制項的完整**:

using

system;

using

system.collections;

using

system.collections.generic;

using

system.text;

using

system.web.ui.webcontrols;

using

system.web;

using

system.web.ui;

using

system.web.ui.design;

using

system.componentmodel;

namespace

net.webcontrols

private

string

_title;

public

string

title

get}

private

itemplate _headertemplate;

//////

頭模版///

[themeable(

true

)][templateinstance(templateinstance.single),browsable(

false

), defaultvalue((

string

)null

)][persistencemode(persistencemode.innerproperty)]

[templatecontainer(

typeof

(templateitem))]

public

itemplate headertemplate

get}

private

itemplate _footertemplate;

//////

腳模版///

[themeable(

true

)][persistencemode(persistencemode.innerproperty)]

[templatecontainer(

typeof

(templateitem))]

public

itemplate footertemplate

get}

private

itemplate _contenttemplate;

//////

模版///

[themeable(

true

)][persistencemode(persistencemode.innerproperty)]

[templateinstance(templateinstance.single), browsable(

false

), defaultvalue((

string

)null

)]public

itemplate contenttemplate

get}

private

bool

_isparser 

=false

;private

templateitem _header;

private

templateitem _footer;

protected

virtual

void

parsertemplate()

if(contenttemplate 

!=null)if

(footertemplate 

!=null)}

protected

override

void

createchildcontrols()

protected

override

void

oninit(eventargs e)

protected

override

void

onprerender(eventargs e)

}///

///模版資料項

///

public

class

templateitem : control, inamingcontainer

private

int_itemindex =0

;private

object

_dataitem;

//////

行索引///

public

intitemindex

}///

///行號

///

public

intrownumber

}public

object

dataitem}}

public

class

//protected override void prefilterproperties(idictionary properties)//;

//string text1 = "verbstyle";

//propertydescriptor descriptor1 = (propertydescriptor)properties[text1];

//if (descriptor1 != null)

////}//

public override void seteditabledesignerregioncontent(editabledesignerregion region, string content)//}

} is it the control you need ?

匯入 使用者控制項包裝器

從開發 webpart 的過程,我們也可以看出,假若想開發功能比較複雜的 webpart 也就是表現樣式比較豐富的 webpart 用我們上面的辦法是行不通的。於是,我們就要想想有沒有別的辦法了。其實,我們仔細考慮下 wss3 中webpart 從哪個類繼承就知道該怎麼作了。由於,無論是 wss3 ...

控制項的包裝

控制項的包裝,就是把標準控制項包裝一層,是復合控制項的一種特殊形式 比如,比較常見的是對textbox的包裝 public mjtextbox usercontrol 比如 textbox不可調整高度 不可設定padding,所以在布局時會產生困難。namespace winform控制項的包裝 p...

執行緒包裝器

thread.h ifndef thread h define thread h include class thread endif thread.cpp include include static void posixthreadproc void param thread thread bo...