|
Применение стилей из тем для собственных элементов управления.
|
|||
---|---|---|---|
#18+
Как задействовать цветовую схему из темы для элементов верхнего меню? Меню изменяет объект SuiteBarBrandingDelegate и в ШП приходит через farm solution. Само меню строится вложенными списками ul и к нему прилагается файл css, в котором цвета и другие параметры накладываются на сами элементы (ul, li относительно класса .menu, который указан в cсамом первом ul). Но все значения статичны. Если мы меняем тему, то при наведении на элемент меню и раскрытии его элементов используется жестко забитый цвет. Мне бы хотелось как-то получать значения из текущей темы. Ознакомился со статьями из msdn, узнал, что есть файлы .spcolor, как они строятся, что есть маркеры цветов, например, [T_THEME_COLOR_SUITEBARHOVERBACKGROUND] - для цвета элемента меню при наведении на него мыши. Но как это задействовать, чтобы заработало - не понимаю. Итак, элемент SuiteBarBrandingDelegate при активизации нашей Feature формирует иерархическую структуру меню, имеется файл CSS, который загружается непосредственно перед меню. Но хотелось бы при смене пользователем темы - получать данные из нее. Пока писал, возник еще один вопрос - а это возможно сделать через файл CSS или в модуле элемента управления, там где мы переписываем функцию Render() придется корректировать стили? Ну и соответственно, как это сделать или где почитать. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2016, 15:07 |
|
Применение стилей из тем для собственных элементов управления.
|
|||
---|---|---|---|
#18+
Решение на поверхности - действительно можно использовать свойства темы через SOM. Я получаю нужные значения из палитры, но теперь проблема их вставить при рендеринге элемента управления. Я решил сделать аналогично привязке статичного файла стилей (рисую <link href="пусть к файлу"...> перед своим меню) - создать элемент <style>, в котором цвета элементов меню уже берутся из палитры темы. Этот элемент вставляется между <link ...> и моим меню. Но вот не могу его нормально построить. В функции Render() используется объект HtmlTextWriter, который для меня конечно же новый. Разобрался в нем на уровне добавить тек с атрибутами и текстом внутри, но вот не могу заполнить правильно элемент <style>. Код: writer.AddAttribute(HtmlTextWriterAttribute.Type, "text/css", true); writer.RenderBeginTag(HtmlTextWriterTag.Style); // if (_SuiteBarBackground != null) { writer.Write(".menu ul { background-color: #" + _SuiteBarBackground.Value.Name + @"; } "); }; if (_SuiteBarHoverBackground != null) { writer.Write(".menu ul a:hover { background-color: #" + _SuiteBarHoverBackground.Value.Name + @"; } "); }; // writer.RenderEndTag(); // style Если смотреть конечный код HTML: <style type="text/css"> - подсвечивается цветами, распознается браузером .menu ul { - не подсвечивается, черный текст - пусто почему то - } .menu ul:hover { - не подсвечивается, черный текст - пусто почему то - } </style> - подсвечивается цветами, распознается браузером Т.е. тег создается, но не заполняется моими значениями. Наверное я просто неправильно работаю с объектом HtmlTextWriterAttribute. Но все сразу понять не получается. Есть какие-либо идеи? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2016, 16:50 |
|
Применение стилей из тем для собственных элементов управления.
|
|||
---|---|---|---|
#18+
Решение найдено! Я правильно использовал объект HtmlTextWriter, ошибкой оказалось простое копирование значения цвета (<SPColor объект>.Value.Name) в строку с присвоением этого значения атрибуту стиля. Дело в том, что файлы палитр .spcolor допускают 8-ми значный код для цвета, где первые 2 знака - затемненность, остальные 6 - сам цвет. А вот определение стилей в теге <style> допускает только 6-ти значное определение цвета. Нужна была проверка на длину представления: writer.Write(".menu ul { background-color: #" + ((_SuiteBarBackground.Value.Name.Length == 8) ? _SuiteBarBackground.Value.Name.Substring(2) : _SuiteBarBackground.Value.Name) + ";}"); writer.WriteLine(""); И все заработало. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2016, 10:37 |
|
|
start [/forum/topic.php?fid=12&msg=39313194&tid=1329938]: |
0ms |
get settings: |
11ms |
get forum list: |
6ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
174ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
125ms |
get tp. blocked users: |
1ms |
others: | 318ms |
total: | 644ms |
0 / 0 |