Как использовать CssStyleCollection для UserControl? - PullRequest
4 голосов
/ 09 января 2010

Я хочу сделать пользовательский рендеринг стиля CSS, поэтому я создал новый UserControl.

Оттуда я думал, что будет легко просто создать новую коллекцию CssStyleCollection под названием Style. Это не работает, хотя! Как мне сделать этот код скомпилированным? (просто пример)

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

Я не понимаю, что я здесь делаю неправильно. CssStyleCollection является закрытым классом, но он не является статическим. Как мне создать новый экземпляр!?

Также указана ошибка компилятора

тип System.Web.UI.CssStyleCollection имеет конструкторы не определены

Ответы [ 2 ]

4 голосов
/ 09 января 2010

CssStyleCollection создается из объекта Style; у объекта Style есть метод GetStyleAttributes, который возвращает CssStyleCollection, поэтому создайте объект Style, назначьте все необходимые реквизиты и верните CssStyleCollection. Кроме того, он требует IUrlResolutionService, который является ссылкой на страницу или элемент управления.

1 голос
/ 09 января 2010

Хорошо, технически единственный правильный способ - взломать .Net и использовать рефлексию для вызова своего частного конструктора ... см. http://bart -at-work.blogspot.com / 2008/11 / create-cssstylecollection- instance.html

Ну, я полагаю, что в CssStyleCollection нет ничего особенного, так что я сделал простой, но элегантный хак без отражения.

CssStyleCollection Style=new Panel().Style;

Я не уверен, насколько это "безопасно", но он работает на .Net и Mono, так что для меня этого достаточно.

...