Группы страниц¶
Элементы (команды) в страницах ленты могут быть логически разделены на группы. Группы страниц ленты разделены вертикальными разделителями. Они отображают подписи внизу, когда применяется Классический командный макет . На следующей картинке показаны группы страниц File, Clipboard, Font и Styles, отображаемые на странице Home:

Определение групп страниц ленты и доступ к ним¶
Группы страниц ленты инкапсулируются объектами класса RibbonPageGroup. В коде вы можете создавать группы страниц, получать к ним доступ и изменять их, используя коллекцию RibbonPage.Groups. Чтобы определить группы страниц в XAML, добавьте объекты RibbonPageGroup между начальным и конечным тегами <RibbonPage>.
<mxr:RibbonPage Header="Home" KeyTip="H" Name="pageHome">
    <mxr:RibbonPageGroup Header="File" IsHeaderButtonVisible="True">
        <!-- ... -->
    </mxr:RibbonPageGroup>
    <mxr:RibbonPageGroup Header="Clipboard" IsHeaderButtonVisible="True">
        <!-- ... -->
    </mxr:RibbonPageGroup>
    <mxr:RibbonPageGroup Header="Font" IsHeaderButtonVisible="True">
        <!-- ... -->
    </mxr:RibbonPageGroup>
    <!-- ... -->
</mxr:RibbonPageGroup>
Вы также можете использовать свойство RibbonPage.GroupsSource для создания групп страниц из коллекции бизнес-объектов в модели представления. Соответствующий шаблон данных должен определять объект RibbonPageGroup и инициализировать его свойства из бизнес-объекта.
Заголовок группы страниц¶
Когда применяется Классический командный макет , группы страниц имеют заголовки внизу. В заголовке группы отображается заголовок (RibbonPageGroup.Header) и кнопка заголовка.

Щелчок по кнопке заголовка не имеет действия по умолчанию. Вы можете привязать действие к кнопке заголовка следующим образом:
- Обработайте событие RibbonPageGroup.HeaderButtonClickилиRibbonPageGroup.HeaderButtonPress. Например, ваш обработчик событий может отобразить диалоговое окно или меню, в котором отображаются дополнительные свойства, относящиеся к группе.
Событие HeaderButtonClick вызывается после нажатия и отпускания левой кнопки мыши над кнопкой заголовка. Событие HeaderButtonPress вызывается сразу после того, как пользователь нажимает любую кнопку мыши над кнопкой заголовка. 
- Назначьте команду свойству RibbonPageGroup.HeaderButtonCommand. Вы можете указать необязательный параметр команды, используя свойствоRibbonPageGroup.HeaderButtonCommandParameter.
Используйте свойство RibbonPageGroup.IsHeaderButtonVisible, чтобы скрыть кнопку заголовка.
Содержимое группы страниц¶
Группа страниц отображает набор тесно связанных элементов ленты. Элементами ленты являются кнопки, кнопки-переключатели, группы кнопок, подменю, встроенные редакторы, галереи и многое другое. Смотрите следующие разделы для получения дополнительной информации: Элементы ленты и Галереи
Чтобы заполнить группу страниц ленты элементами, используйте коллекцию RibbonPageGroup.Items.  В XAML вы можете определить элементы между начальным и конечным тегами <RibbonPageGroup>.
 <mxr:RibbonPage Header="Home" KeyTip="H">
    <mxr:RibbonPageGroup Header="File" IsHeaderButtonVisible="True">
        <mxb:ToolbarButtonItem Header="New" KeyTip="N" Glyph="{x:Static icons:Basic.Docs_Add}"
                               mxr:RibbonControl.DisplayMode="Large"/>
        <mxb:ToolbarButtonItem Header="Open" KeyTip="O"
                               Glyph="{x:Static icons:Basic.Folder_Open}" />
        <mxb:ToolbarButtonItem Header="Exit" KeyTip="E"
                               Glyph="{x:Static icons:Basic.Remove}" />
    </mxr:RibbonPageGroup>
    <mxr:RibbonPageGroup Header="Font" IsHeaderButtonVisible="True">
        <mxb:ToolbarCheckItemGroup ShowSeparator="True">
            <mxb:ToolbarCheckItem Header="Bold" KeyTip="B" Glyph="{x:Static icons:Basic.Font_Bold}" />
            <mxb:ToolbarCheckItem Header="Italic" KeyTip="I" Glyph="{x:Static icons:Basic.Font_Italic}" />
            <mxb:ToolbarCheckItem Header="Underline" KeyTip="U" Glyph="{x:Static icons:Basic.Font_Underline}"  />
        </mxb:ToolbarCheckItemGroup>
       <!-- ... -->
    </mxr:RibbonPageGroup>
</mxr:RibbonPage>
Вы также можете использовать свойство RibbonPageGroup.ItemsSource для создания элементов из коллекции бизнес-объектов в модели представления. Соответствующие шаблоны данных должны определять элементы ленты и инициализировать их свойства из нижележащих бизнес-объектов.
Картинка группы страниц¶
При изменении размера контрола ленты функция адаптивного размещения может сворачивать определенные группы страниц. В свернутом состоянии элементы группы отображаются в всплывающем окне.

Вы можете использовать свойство RibbonPageGroup.Glyph для отображения картинки в кнопке свернутой группы:

xmlns:icons="https://schemas.eremexcontrols.net/avalonia/icons"
<mxr:RibbonPageGroup Header="File" Glyph="{x:Static icons:Basic.Doc}">
Размещение элементов в группах страниц¶
Адаптивное размещение¶
Контрол ленты поддерживает функцию адаптивного размещения, которая регулирует размещение элементов в группах страниц ленты при изменении размера контрола ленты.

Объединение элементов в группы¶
Вы можете сгруппировать наборы элементов ленты в неразрывные контейнеры (группы), используя ToolbarItemGroup и ToolbarCheckItemGroup . Эти контейнеры гарантируют, что элементы отображаются вместе в одной линии, сохраняя этот макет даже при применении функции адаптивного размещения. При изменении размера ленты можно свернуть только весь контейнер целиком, а не отдельные его элементы.
Например, в анимации выше элементы  ,
,  и
 и  объединены в неразрывный контейнер.
 объединены в неразрывный контейнер. 
Картинки с элементами¶
Когда применяется Классический командный макет , функция адаптивного размещения также регулирует размер отображения элементов по мере изменения размера ленты — от большого к маленькому с текстом до маленьких картинок и наоборот.

Attached-свойство RibbonControl.DisplayMode позволяет указать поддерживаемые режимы отображения для элементов ленты в группах страниц ленты в Классическом командном размещении .
Вы можете заставить элемент использовать только большие картинки, маленькие картинки, маленькие картинки с текстом или комбинацию этих режимов отображения.
<mxb:ToolbarButtonItem Header="Open" KeyTip="O" mxr:RibbonControl.DisplayMode="Large"
                          Glyph="{x:Static icons:Basic.Folder_Open}" />
Смотрите следующий раздел для получения дополнительной информации: Адаптивный размер картинки в классическом размещении команд
Связанный API¶
- AllowCollapse— Указывает, может ли группа быть свернута при уменьшении ширины контрола ленты.
- IsCollapsed— Возвращает, если текущая группа в данный момент свернута.
Настройка размещения элементов в группах страниц¶
Ленточный контрол поддерживает два режима размещения элементов в группах страниц:
- 
Столбец (вниз, затем поперек)  Элемент перемещается в новый столбец, если высоты группы недостаточно для отображения элемента ниже его предыдущего одноуровневого элемента. В настоящее время все элементы ленты, за исключением неразрывных групп , поддерживают только режим размещения столбцов. 
- 
Ряд (поперек, затем вниз)  Элемент перемещается в новую строку, если ширина группы недостаточна для отображения элемента справа от его предыдущего одноуровневого элемента. Неразрывные контейнеры (ToolbarItemGroup и ToolbarCheckItemGroup ) по умолчанию используют режим размещения строк. 
Attached-свойство RibbonPageGroup.ItemLayouMode позволяет вам изменить режим размещения для неразрывных контейнеров  со строки (по умолчанию) на столбец. Свойство RibbonPageGroup.ItemLayouMode в настоящее время не действует для других элементов ленты.
Значением свойства RibbonPageGroup.ItemLayouMode по умолчанию является Default, что эквивалентно Row для неразрывных контейнеров и Column для других элементов ленты.
- Если два последовательных элемента используют разные режимы размещения (столбец и строка), второй элемент автоматически перемещается в новый столбец.
- Чтобы разместить набор последовательных элементов с использованием режима размещения по столбцам или строкам, убедитесь, что ко всем этим элементам явно или неявно применен требуемый режим размещения.
- Совет: Вы можете объединить два элемента ленты в отдельном неразрывном контейнере , чтобы они действовали как единое целое.
Пример - Размещение элементов в столбце¶
В следующем примере используется attached-свойство RibbonPageGroup.ItemLayouMode для размещения элементов в виде столбца.

Этот макет состоит из трех рядов элементов ленты:
- 
В строке 1 отображается переключающий элемент. 
- 
В строке 2 отображается контейнер ( ToolbarItemGroup), который сочетает в себе текстовый редактор и кнопку. Группировка элементов в контейнере необходима для позиции элементов рядом друг с другом.<mxb:ToolbarItemGroup Name="groupSearchBox"> <mxb:ToolbarEditorItem Header="Search" EditorWidth="150"> <mxb:ToolbarEditorItem.EditorProperties> <mxe:TextEditorProperties/> </mxb:ToolbarEditorItem.EditorProperties> </mxb:ToolbarEditorItem> <mxb:ToolbarButtonItem Header="Find" Glyph="{SvgImage 'avares://Ribbon-Layout/Assets/arrow-right.svg'}" Command="{Binding FindCommand}"/> </mxb:ToolbarItemGroup>
- 
В строке 3 отображается контейнер ( ToolbarCheckItemGroup), который объединяет три переключающих элемента:<mxb:ToolbarCheckItemGroup Name="groupSearchProperties" > <mxb:ToolbarCheckItem Header="Match case" IsChecked="{Binding IsMatchCase}" Glyph="{SvgImage 'avares://Ribbon-Layout/Assets/match-case.svg'}"/> <mxb:ToolbarCheckItem Header="Match whole word" IsChecked="{Binding IsMatchWholeWord}" Glyph="{SvgImage 'avares://Ribbon-Layout/Assets/match-whole-word.svg'}"/> <mxb:ToolbarCheckItem Header="Use regular expressions" IsChecked="{Binding IsUseRegExp}" Glyph="{SvgImage 'avares://Ribbon-Layout/Assets/match-regexp.svg'}"/> </mxb:ToolbarCheckItemGroup>
Поместите элементы btnSort, groupSearchBox и groupSearchProperties в RibbonPageGroup:
<mxr:RibbonControl>
    <mxr:RibbonPage Header="Home">
        <mxr:RibbonPageGroup Header="Sort">
            <mxb:ToolbarCheckItem Name="btnSort" Header="Sort Results Alphabetically" CheckBoxStyle="CheckBox"/>
            <mxb:ToolbarItemGroup Name="groupSearchBox">
                <!-- ... -->
            </mxb:ToolbarItemGroup>
            <mxb:ToolbarCheckItemGroup Name="groupSearchProperties" >
                <!-- ... -->
            </mxb:ToolbarCheckItemGroup
        </mxr:RibbonPageGroup>
    </mxr:RibbonControl>
</mxr:RibbonPage
Этот код создает нежелательное размещение, при котором контейнеры groupSearchBox и groupSearchProperties перемещаются в отдельный столбец. Это происходит потому, что элемент btnSort использует режим размещения столбцов, в то время как контейнеры используют режим размещения строк по умолчанию.
 
 
Чтобы разместить контейнеры под кнопкой btnSort, установите attached-свойство RibbonPageGroup.ItemLayouMode в значение Столбец для этих контейнеров.
<mxr:RibbonControl ApplicationButtonContent="File" ApplicationButtonKeyTip="F">
    <mxr:RibbonPage Header="Home" KeyTip="M">
        <mxr:RibbonPageGroup Header="Sort">
            <mxb:ToolbarCheckItem Name="btnSort" Header="Sort Results Alphabetically" CheckBoxStyle="CheckBox"/>
            <mxb:ToolbarItemGroup Name="groupSearchBox"
                                  mxr:RibbonPageGroup.ItemLayoutMode="Column">
                <mxb:ToolbarEditorItem Header="Search" EditorWidth="150">
                    <mxb:ToolbarEditorItem.EditorProperties>
                        <mxe:TextEditorProperties/>
                    </mxb:ToolbarEditorItem.EditorProperties>
                </mxb:ToolbarEditorItem>
                <mxb:ToolbarButtonItem
                        Header="Find"
                        Glyph="{SvgImage 'avares://Ribbon-Layout/Assets/arrow-right.svg'}"
                        Command="{Binding FindCommand}"/>
            </mxb:ToolbarItemGroup>
            <mxb:ToolbarCheckItemGroup Name="groupSearchProperties" 
                                       mxr:RibbonPageGroup.ItemLayoutMode="Column" >
                <mxb:ToolbarCheckItem
                    Header="Match case"
                    IsChecked="{Binding IsMatchCase}"
                    Glyph="{SvgImage 'avares://Ribbon-Layout/Assets/match-case.svg'}"/>
                <mxb:ToolbarCheckItem
                    Header="Match whole word"
                    IsChecked="{Binding IsMatchWholeWord}"
                    Glyph="{SvgImage 'avares://Ribbon-Layout/Assets/match-whole-word.svg'}"/>
                <mxb:ToolbarCheckItem
                    Header="Use regular expressions"
                    IsChecked="{Binding IsUseRegExp}"
                    Glyph="{SvgImage 'avares://Ribbon-Layout/Assets/match-regexp.svg'}"/>
            </mxb:ToolbarCheckItemGroup>
        </mxr:RibbonPageGroup>
    </mxr:RibbonPage>
</mxr:RibbonControl>
Теперь элементы btnSort, groupSearchBox и groupSearchProperties используют режим размещения по столбцам, поэтому они размещены в одном столбце, как показано на картинке ниже:
 
 
Размещение неразбивающихся контейнеров в два или три ряда¶
Если группа страниц достаточно широка, элементы, объединенные в неразрывные контейнеры (ToolbarItemGroup и ToolbarCheckItemGroup ), будут размещены в два ряда. Когда ширина группы страниц уменьшается, контейнеры размещены в три ряда, что создает более компактное размещение.

В особых случаях может потребоваться принудительное размещение неразбивающихся контейнеров в два или три ряда.
Для этой цели установите attached-свойство RibbonPageGroup.ItemGroupLayoutMode для первого неразрывного контейнера равным Layout2Rows или Layout3Rows (значение свойства по умолчанию - AdaptiveLayout).
Пример - Принудительное размещение контейнеров в два ряда¶
Рассмотрим RibbonPageGroup, который содержит четыре неразрывных контейнера (группы) элементов.

Когда вы изменяете размер контрола ленты, функция адаптивного размещения контейнеров размещает контейнеры в два или три ряда, подгоняя их под доступное пространство.

Чтобы принудительно разместить контейнеры в два ряда, установите для attached-свойства RibbonPageGroup.ItemGroupLayoutMode для первого неразрывного контейнера значение Layout2Rows.
<mxr:RibbonPageGroup Header="Paragraph">
    <mxb:ToolbarItemGroup Name="gIndent"
                          mxr:RibbonPageGroup.ItemGroupLayoutMode="Layout2Rows">
        <mxb:ToolbarButtonItem Header="Increase Indent" Glyph="{x:Static icons:Basic.Level_Increase}"/>
        <mxb:ToolbarButtonItem Header="Decrease Indent" Glyph="{x:Static icons:Basic.Level_Reduce}"/>
    </mxb:ToolbarItemGroup>
    <mxb:ToolbarItemGroup  Name="gLineSpacing">
        <mxb:ToolbarButtonItem Header="Increase Line Spacing" Glyph="{x:Static icons:Basic.List_Collapse}"/>
        <mxb:ToolbarButtonItem Header="Decrease Line Spacing" Glyph="{x:Static icons:Basic.List_Expand}"/>
    </mxb:ToolbarItemGroup>
    <mxb:ToolbarItemGroup  Name="gParaNumbering">
        <mxb:ToolbarButtonItem Header="Bullets" Glyph="{x:Static icons:Office.Bullets}" />
        <mxb:ToolbarButtonItem Header="Numbering" Glyph="{x:Static icons:Office.Line_Numbering}" />
        <mxb:ToolbarButtonItem Header="Multilevel List" Glyph="{x:Static icons:Office.Multilevel_List}" />
    </mxb:ToolbarItemGroup>
    <mxb:ToolbarCheckItemGroup  Name="gAlign" CheckType="Radio">
        <mxb:ToolbarCheckItem Header="Align Left" Glyph="{x:Static icons:Alignment.Align_Left}"/>
        <mxb:ToolbarCheckItem Header="Align Center" Glyph="{x:Static icons:Alignment.Align_Horizontal_Centers}"/>
        <mxb:ToolbarCheckItem Header="Align Right" Glyph="{x:Static icons:Alignment.Align_Right}"/>
    </mxb:ToolbarCheckItemGroup>
</mxr:RibbonPageGroup>
Это приводит к размещению контейнеров в два ряда. Если места недостаточно для отображения контейнеров целиком, они автоматически сворачиваются.

Если вам нужен определенный элемент для начала нового столбца, поместите объект ToolbarSeparatorItem перед этим элементом.
<mxr:RibbonPageGroup Header="Paragraph">
    <mxb:ToolbarItemGroup Name="gIndent" mxr:RibbonPageGroup.ItemGroupLayoutMode="Layout2Rows">
        <!-- ... -->
    </mxb:ToolbarItemGroup>
    <mxb:ToolbarItemGroup  Name="gLineSpacing">
        <!-- ... -->    
    </mxb:ToolbarItemGroup>
    <mxb:ToolbarItemGroup  Name="gParaNumbering">
        <!-- ... -->
    </mxb:ToolbarItemGroup>
    <mxb:ToolbarSeparatorItem/>
    <mxb:ToolbarCheckItemGroup  Name="gAlign" CheckType="Radio">
        <!-- ... -->        
    </mxb:ToolbarCheckItemGroup>
</mxr:RibbonPageGroup>

* Эта страница была создана автоматически с помощью сервиса машинного перевода Яндекс Переводчик.