我想要自定义渲染CSS样式,因此我创建了一个新的UserControl。
从那里开始,我认为只需在Style名称下创建一个新的CssStyleCollection即可。虽然它不起作用!如何编译此代码? (只是一个例子)
class MyControl : UserControl{
CssStyleCollection Style=new CssStyleCollection(); //compiler error on the `new..`
}
我不明白我在这里做错了什么。 CssStyleCollection是一个密封类,但它不是静态的。我如何实例化一个新的!?
此外,给出的编译器错误是
类型 System.Web.UI.CssStyleCollection有 没有构造函数定义
答案 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,所以它对我来说已经足够了。