2010-01-08 21 views
3

我想做自定義渲染的CSS樣式,因此我創建了一個新的UserControl。如何將CssStyleCollection用於UserControl?

從那裏,我認爲這很容易,只需要創建一個名爲Style下的新的CssStyleCollection。它雖然不起作用!我如何編譯這段代碼? (只是一個例子)

class MyControl : UserControl{ 
    CssStyleCollection Style=new CssStyleCollection(); //compiler error on the `new..` 
} 

我不明白我在做什麼錯在這裏。 CssStyleCollection是一個密封的類,但它不是靜態的。我如何實例化一個新的!?

此外,由於編譯器錯誤是

類型 System.Web.UI.CssStyleCollection已經 沒有構造函數定義

+0

你爲什麼試圖使用這個確切的類? – Eilon 2010-01-09 02:28:48

+0

UserControl通常由其他控件的集合組成。假設它包含一個TextBox和一個Button。在UserControl本身上擁有CSS屬性真的很直觀嗎?例如,設置字體大小會怎樣?影響TextBox,Button或兩者? – 2010-01-09 09:54:38

+0

實際上它更像是一個'HeaderStyle'和'ContentStyle'類型的東西,它們的頭部和內容都被當作是面板來對待,除非它很容易繼承,並且所有控件都進入了內容面板(儘管渲染是關注的,也就是) – Earlz 2010-01-09 17:23:17

回答

4

CssStyleCollection是從Style對象創建的;一個Style對象有一個GetStyleAttributes方法返回一個CssStyleCollection,所以創建一個Style對象,分配所有你想要的道具,然後返回CssStyleCollection。此外,它還需要IUrlResolutionService,它是對頁面或控件的引用。

+1

引用MSDN - http:///msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.style.getstyleattributes%28v=VS.100%29.aspx System.Web.UI.WebControls.Style style = new System。 Web.UI.WebControls.Style(); CssStyleCollection cssStyles = style.GetStyleAttributes(someControl); – 2010-10-15 09:05:26

0

好,技術上唯一正確的方法是破解的.Net並使用反射稱它是私人構造...看到http://bart-at-work.blogspot.com/2008/11/create-cssstylecollection-instance.html

那麼,我認爲一個CssStyleCollection沒有什麼太特別的東西,所以什麼我做的只是一個簡單而優雅的黑客而沒有反思。

CssStyleCollection Style=new Panel().Style; 

我不確定它是多麼的「安全」,但它適用於.Net和Mono,所以它對我來說已經足夠了。

+1

使用私有反射來實例化一個類型是不合適的。 – Eilon 2010-01-09 02:30:33

+0

這也不適合我,這就是爲什麼我做了'新面板()。風格的東西..反射的東西是我發現做google搜索的唯一途徑 – Earlz 2010-01-09 17:25:41

相關問題