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...