SharePoint Ribbon API. Использование ToggleButton
Пример работы с ToggleButton при использовании SharePoint Ribbon API. Я покажу как создать новую вкладку, разместить в ней контролы и отобразить её на странице.

Веб-часть
Для регистрации риббон-элементов, используя SharePoint Ribbon API, необходимо иметь "доступ" к текущей странице (если быть точным необходим SPRibbon.Current). Поэтому самым простым будет создать веб-часть, которая будет регистрировать элементы рибона.
Я создал визуальную веб-часть, в разметке которой (.ascx-файл) добавил TextBox. Он понадобится для хранения текущего состояния:
- <asp:TextBox ID="ToggleState" runat="server" Text="A0"></asp:TextBox>
 
Состояние можно хранить по-разному: глобальная переменная в javascript, хранить её в качестве значения атрибута любого DOM-элемента страницы. Вариантом уйма, я выбрал именно TextBox исключительно для наглядности.
Для того, чтобы записывать и получать текущее состояние в веб-часть добавлены две крайне простые javascript-функции:
- function SetToggleState(val) {
 -     document.getElementById('<%= ToggleState.ClientID %>').value = val;
 - }
 -     
 - function GetToggleState() {
 -     return document.getElementById('<%= ToggleState.ClientID %>').value;
 - }
 
Думаю, здесь пояснения не требуются.
ToggleButton
В мойм примере кнопок будет несколько, инициализация их происходит однообразно. Вот пример одной из них:
- // Инициализация ToggleButton, Title и ID идентичны
 - var toggleButtonA0 = new RibbonToggleButton("ButtonA0", "ButtonA0")
 -     {
 -         // Иконка из стандартного набора SharePoint
 -         Image = RibbonImageDefinition.Standard15(2, 2),
 -         // При активации, проверяем текущее состояние
 -         // и устанавливаем флаг properties.On, если оно равно "A0"
 -         OnClientActivate = @"properties.On = (GetToggleState() == ""A0"");",
 -         // При клике на кнопку, записываем новое состояние 
 -         // и обновляем рибон
 -         OnClientClick = @"SetToggleState(""A0""); RefreshCommandUI();"
 -     }
 
При активации ToggleButton можно использовать объект properties, свойство On которого отвечает за состояние переключателя (true - нажата, false - нет). При задании нового состояния вызывается метод RefreshCommandUI для того, чтобы "заставить" SharePoint инициализировать все элементы, в том числе исполнить javascript-код, указанный в свойстве OnClientActivate.
RibbonTab
Созданные кнопки мы помещаем в следующую иерархию элементов рибона (сверху-вниз): вкладка - группа - секция. В моём примере секций будет две с разделителем между ними:
- // Вкладка
 - var tab = new RibbonTab("DemoToggleTab", "Toggle Demo")
 - {
 -     // Порядковый номер, для того, чтобы
 -     // вкладка располагалась справа от стандартных вкладок "Обзор" и "Страница"
 -     Sequence = 1001
 - };
 -  
 - // Группа
 - var group = new RibbonGroup("Group", "Group");
 -  
 - // Две секции с разделетилем между ними
 - group.Sections = new[]
 -     {
 -         sectionA, 
 -         RibbonGroupSection.Divider, 
 -         sectionB
 -     };
 -  
 - // Добавляем группу во вкладку
 - tab.Groups = new[]
 -     {
 -         group
 -     };
 -  
 - // Добавляем новую вкладку и делаем её активной по умолчанию
 - RibbonManager.Current.AddTabToPage(tab, Page, true);
 
Результат
В результате мы получаем простую вкладку с переключателями:

Получать значение текущей нажатой кнопки можно как на сервере, используя свойство ToggleState.Text, так и на клиенте.
 








































