Перейти к содержанию

Группы страниц

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

ribbon-page-groups

Определение групп страниц Ribbon и доступ к ним

Группы страниц Ribbon инкапсулируются объектами класса RibbonPageGroup. В code-behind вы можете создавать, получать доступ и изменять группы страниц с помощью коллекции 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, чтобы создавать группы страниц из коллекции бизнес-объектов во View Model. Соответствующий шаблон данных должен определять объект RibbonPageGroup и инициализировать его настройки из бизнес-объекта.

Заголовок группы страниц

Когда применена классическая компоновка команд, группы страниц имеют заголовки внизу. Заголовок группы отображает подпись (RibbonPageGroup.Header) и кнопку заголовка.

ribbon-page-group-header

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

  • Обработайте событие RibbonPageGroup.HeaderButtonClick или RibbonPageGroup.HeaderButtonPress. Например, ваш обработчик события может отобразить диалог или меню с дополнительными настройками, связанными с группой.

Событие HeaderButtonClick возникает после нажатия и отпускания левой кнопки мыши над кнопкой заголовка. Событие HeaderButtonPress возникает сразу после того, как пользователь нажимает любую кнопку мыши над кнопкой заголовка.

  • Назначьте команду свойству RibbonPageGroup.HeaderButtonCommand. Вы можете задать необязательный параметр команды с помощью свойства RibbonPageGroup.HeaderButtonCommandParameter.

Используйте свойство RibbonPageGroup.IsHeaderButtonVisible, чтобы скрыть кнопку заголовка.

Содержимое группы страниц

Группа страниц отображает набор тесно связанных элементов Ribbon. Элементы Ribbon — это кнопки, кнопки-флажки, группы кнопок, подменю, встроенные редакторы, галереи и другое. Дополнительную информацию смотрите в следующих разделах: Элементы Ribbon и Галереи

Чтобы заполнить группу страниц Ribbon элементами, используйте коллекцию 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, чтобы создавать элементы из коллекции бизнес-объектов во View Model. Соответствующие шаблоны данных должны определять элементы Ribbon и инициализировать их настройки из базовых бизнес-объектов.

Изображение группы страниц

Когда контрол Ribbon изменяет размер, функция адаптивной компоновки может сворачивать определённые группы страниц. В свёрнутом состоянии элементы группы отображаются во всплывающем окне.

page-group-collapsed

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

page-group-collapsed-with-glyph

xmlns:icons="https://schemas.eremexcontrols.net/avalonia/icons"
<mxr:RibbonPageGroup Header="File" Glyph="{x:Static icons:Basic.Doc}">

Размещение элементов в группах страниц

Адаптивная компоновка

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

ribbon-adaptivelayout

Объединение элементов в группы

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

Например, в анимации выше элементы ribbon-command-bold, ribbon-command-italic и ribbon-command-underline объединены в неразрывный контейнер.

Изображения элементов

Когда применена классическая компоновка команд, функция адаптивной компоновки также подстраивает размер отображения элементов при изменении размера Ribbon — от больших к маленьким с текстом и к маленьким глифам, и обратно.

ribbon-adaptive-layout-change-size-of-icons

Присоединённое свойство RibbonControl.DisplayMode позволяет задавать поддерживаемые режимы отображения для элементов Ribbon в группах страниц Ribbon в классической компоновке команд. Вы можете принудительно задать элементу использование только больших изображений, только маленьких изображений, маленьких изображений с текстом или комбинации этих режимов отображения.

<mxb:ToolbarButtonItem Header="Open" KeyTip="O" mxr:RibbonControl.DisplayMode="Large"
                          Glyph="{x:Static icons:Basic.Folder_Open}" />

Дополнительную информацию смотрите в следующем разделе: Адаптивный размер глифа в классической компоновке команд

Связанный API

  • AllowCollapse — задаёт, может ли группа быть свёрнута при уменьшении ширины контрола Ribbon.
  • IsCollapsed — возвращает, свёрнута ли текущая группа в данный момент.

Настройка размещения элементов в группах страниц

Контрол Ribbon поддерживает два режима размещения элементов в группах страниц:

  • Столбец (вниз, затем поперёк)

    ribbon-layoutingroups-columnmode

    Элемент перемещается в новый столбец, если высоты группы недостаточно для отображения элемента под его предшествующим соседом.

    В настоящее время все элементы Ribbon, кроме неразрывных групп, поддерживают только режим размещения «Столбец».

  • Строка (поперёк, затем вниз)

    ribbon-layoutingroups-rowmode

    Элемент перемещается в новую строку, если ширины группы недостаточно для отображения элемента справа от его предшествующего соседа.

    Неразрывные контейнеры (ToolbarItemGroup и ToolbarCheckItemGroup) по умолчанию используют режим размещения «Строка».

Присоединённое свойство RibbonPageGroup.ItemLayouMode позволяет изменить режим размещения для неразрывных контейнеров со «Строки» (по умолчанию) на «Столбец». Свойство RibbonPageGroup.ItemLayouMode в настоящее время не действует для других элементов Ribbon.

Значение свойства RibbonPageGroup.ItemLayouMode по умолчанию — Default, что эквивалентно Row для неразрывных контейнеров и Column для других элементов Ribbon.

  • Если два последовательных элемента используют разные режимы размещения (Column и Row), второй элемент автоматически сдвигается в новый столбец.
  • Чтобы расположить набор последовательных элементов в режиме размещения Column или Row, убедитесь, что нужный режим размещения применён ко всем этим элементам, явно или неявно.
  • Совет: вы можете объединить два элемента Ribbon в отдельный неразрывный контейнер, чтобы они действовали как единое целое.

Пример - размещение элементов в столбец

Следующий пример использует присоединённое свойство RibbonPageGroup.ItemLayouMode, чтобы разместить элементы в столбец.

ribbon-ItemLayoutDirectionInParent-example-result

Эта компоновка состоит из трёх строк элементов Ribbon:

  • Строка 1 отображает элемент-флажок.

    <mxb:ToolbarCheckItem Name="btnSort" Header="Sort Results Alphabetically" CheckBoxStyle="CheckBox"/>
    
  • Строка 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 использует режим размещения «Столбец», тогда как контейнеры по умолчанию используют режим «Строка».

ribbon-ItemLayoutDirectionInParent-example-undesired-result

Чтобы расположить контейнеры под кнопкой btnSort, установите присоединённое свойство RibbonPageGroup.ItemLayouMode в Column для этих контейнеров.

<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 используют режим размещения Column, поэтому они располагаются в один столбец, как показано на изображении ниже:

ribbon-ItemLayoutDirectionInParent-example-result

Размещение неразрывных контейнеров в две или три строки

Если группа страниц достаточно широка, элементы, объединённые в неразрывные контейнеры (ToolbarItemGroup и ToolbarCheckItemGroup), располагаются в две строки. При уменьшении ширины группы страниц контейнеры располагаются в три строки, создавая более компактную компоновку.

ribbon-group-three-and-two-rows

В определённых случаях вам может потребоваться принудительно расположить неразрывные контейнеры в две или три строки. Для этого установите присоединённое свойство RibbonPageGroup.ItemGroupLayoutMode для первого неразрывного контейнера в Layout2Rows или Layout3Rows (значение свойства по умолчанию — AdaptiveLayout).

Пример - принудительное размещение контейнеров в две строки

Рассмотрим RibbonPageGroup, содержащий четыре неразрывных контейнера (группы) элементов.

ItemGroupLayoutMode-example-indicate4groups

При изменении размера контрола Ribbon функция адаптивной компоновки располагает контейнеры в две или три строки, чтобы уместить их в доступное пространство.

ItemGroupLayoutMode-example-animation

Чтобы принудительно расположить контейнеры в две строки, установите присоединённое свойство 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>

В результате контейнеры располагаются в две строки. Если недостаточно места для отображения контейнеров целиком, они автоматически сворачиваются.

ItemGroupLayoutMode-example-result-animation

Если вам нужно, чтобы определённый элемент начинал новый столбец, поместите объект 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>

ItemGroupLayoutMode-example-add-separator



* Эта страница переведена с использованием технологий машинного перевода.