powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / SharePoint [игнор отключен] [закрыт для гостей] / Применение стилей из тем для собственных элементов управления.
3 сообщений из 3, страница 1 из 1
Применение стилей из тем для собственных элементов управления.
    #39312754
edd1977
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как задействовать цветовую схему из темы для элементов верхнего меню?
Меню изменяет объект SuiteBarBrandingDelegate и в ШП приходит через farm solution. Само меню строится вложенными списками ul и к нему прилагается файл css, в котором цвета и другие параметры накладываются на сами элементы (ul, li относительно класса .menu, который указан в cсамом первом ul). Но все значения статичны. Если мы меняем тему, то при наведении на элемент меню и раскрытии его элементов используется жестко забитый цвет.

Мне бы хотелось как-то получать значения из текущей темы. Ознакомился со статьями из msdn, узнал, что есть файлы .spcolor, как они строятся, что есть маркеры цветов, например, [T_THEME_COLOR_SUITEBARHOVERBACKGROUND] - для цвета элемента меню при наведении на него мыши. Но как это задействовать, чтобы заработало - не понимаю.

Итак, элемент SuiteBarBrandingDelegate при активизации нашей Feature формирует иерархическую структуру меню, имеется файл CSS, который загружается непосредственно перед меню. Но хотелось бы при смене пользователем темы - получать данные из нее.

Пока писал, возник еще один вопрос - а это возможно сделать через файл CSS или в модуле элемента управления, там где мы переписываем функцию Render() придется корректировать стили? Ну и соответственно, как это сделать или где почитать.
...
Рейтинг: 0 / 0
Применение стилей из тем для собственных элементов управления.
    #39312870
edd1977
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решение на поверхности - действительно можно использовать свойства темы через 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. Но все сразу понять не получается. Есть какие-либо идеи?
...
Рейтинг: 0 / 0
Применение стилей из тем для собственных элементов управления.
    #39313194
edd1977
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решение найдено!

Я правильно использовал объект 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("");

И все заработало.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / SharePoint [игнор отключен] [закрыт для гостей] / Применение стилей из тем для собственных элементов управления.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]