如何使用CssStyleCollection进行UserControl?

时间:2010-01-08 23:08:50

标签: c# asp.net css custom-controls

我想要自定义渲染CSS样式,因此我创建了一个新的UserControl。

从那里开始,我认为只需在Style名称下创建一个新的CssStyleCollection即可。虽然它不起作用!如何编译此代码? (只是一个例子)

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

我不明白我在这里做错了什么。 CssStyleCollection是一个密封类,但它不是静态的。我如何实例化一个新的!?

此外,给出的编译器错误是

  

类型   System.Web.UI.CssStyleCollection有   没有构造函数定义

2 个答案:

答案 0 :(得分:4)

CssStyleCollection是从Style对象创建的; Style对象有一个返回CssStyleCollection的GetStyleAttributes方法,因此创建一个Style对象,分配所需的所有道具,并返回CssStyleCollection。此外,它需要IUrlResolutionService,它是对页面或控件的引用。

答案 1 :(得分:1)

好的,从技术上讲,唯一正确的方法是破解.Net并使用反射来调用它的私有构造函数...请参阅http://bart-at-work.blogspot.com/2008/11/create-cssstylecollection-instance.html

好吧,我认为CssStyleCollection中没有任何特别之处,所以我所做的是一个简单而优雅的黑客而没有反射。

CssStyleCollection Style=new Panel().Style;

我不确定它是多么“安全”,但它适用于.Net和Mono,所以它对我来说已经足够了。