Перенастройка ленты с помощью режимов приложения

Платформа ленты Windows поддерживает динамическую перенастройку и предоставление основных элементов пользовательского интерфейса ленты во время выполнения на основе состояния приложения (также называемого контекстом). Объявленные и связанные с определенными элементами в разметке различные состояния, поддерживаемые приложением, называются режимами приложения.

Введение

Режимы приложения состоят из логических групп элементов управления, которые предоставляют некоторые основные функциональные возможности приложения в пользовательском интерфейсе ленты. Эти режимы динамически включаются или отключаются приложением с помощью вызова метода платформы IUIFramework::SetModes, который включает или отключает видимость одного или нескольких режимов приложения.

Контекстный пользовательский интерфейс

Платформа ленты предоставляет широкие возможности для пользователей, включив динамические элементы управления, которые легко реагируют на взаимодействие с пользователем и контекст приложения. Этот полнофункциональный контекстный пользовательский интерфейс предоставляется с помощью сочетания следующих механизмов:

  • Коллекции — элементы управления на основе коллекций, поддерживающие динамическое управление коллекциями элементов.
  • Контекстные вкладки — вкладки ленты, видимость которых определяется изменением контекста рабочей области, например выбором изображения в документе.
  • Режимы приложения — основные функциональные возможности приложения, зависящие от контекста приложения.

В некоторых отношениях режимы приложения функционально похожи на контекстные вкладки. Однако основное различие заключается в намерении и область каждого из них.

Контекстные элементы управления активируются в ответ на изменение контекста в приложении. Например, в Microsoft Paint для Windows 7 контекстная вкладка, содержащая группы текстовых команд, отображается, когда пользователь вставляет текстовую область в рабочую область. Эта контекстная вкладка не содержит основных команд для приложения и предоставляется только в пользовательском интерфейсе, так как контекст в приложении изменился. Основные функции приложения (команды редактирования изображений) по-прежнему актуальны и доступны для пользователя, даже если контекстная вкладка видна.

Режимы приложения отличаются от контекстных элементов управления тем, что они перенастраивать функциональные возможности в ответ на изменения в контексте, в который работает приложение. Режимы приложения находятся на более высоком уровне абстракции; они позволяют перенастроить основные функциональные возможности приложения, а не временно предоставлять функциональные возможности, которые не являются основным компонентом пользовательского интерфейса. Например, в Microsoft Paint для Windows 7 при вызове команды предварительного просмотра происходит переключение в режиме приложения. Когда Microsoft Paint переключается на предварительный просмотр, контекст, в который работает приложение, изменяется с редактирования на предварительный просмотр. В результате основные функциональные возможности приложения изменяются до тех пор, пока предварительный просмотр не будет отменен и приложение снова не перейдет в контекст редактирования.

Сценарий простого режима приложения

В следующем сценарии показано, как используются режимы приложения в приложении RibbonApp для предоставления дискретных аспектов основных функциональных возможностей.

В RibbonApp определены два режима приложения:

  • Простой режим предоставляет базовые команды в пользовательском интерфейсе ленты. Эти команды отображаются всегда, независимо от того, какой режим приложения активен.
  • Расширенный режим предоставляет сложные команды, предназначенные для опытных пользователей приложения. Эти расширенные команды отображаются в пользовательском интерфейсе ленты в дополнение к простым командам.

По умолчанию ribbonApp открыт в простом режиме, а команды, необходимые для начинающих пользователей, отображаются в меню приложения и на вкладке Главная . На следующих снимках экрана показано меню приложения RibbonApp и вкладка "Главная " в простом режиме, где выделены модальные элементы управления.

Снимок экрана: вкладка для простого режима приложения.Снимок экрана: меню приложения для простого режима приложения.

Хотя этих команд может быть достаточно для начинающих пользователей, RibbonApp также поддерживает опытных пользователей в расширенном режиме, который при активации путем нажатия кнопки Переключиться в расширенный режим в меню приложения отображает дополнительные основные функции.

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

Снимок экрана: вкладка для расширенного режима приложения.Снимок экрана: меню приложения для расширенного режима приложения.

Реализация режимов приложения

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

Определение режимов

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

RibbonApp имеет два контекста, которые могут быть активными в любой момент времени: простой и расширенный. Поэтому для RibbonApp требуется два режима: Простой и Расширенный.

Назначение элементов управления режимам приложения

После определения режимов приложения назначьте каждому элементу управления ленты режим, объявив атрибут ApplicationModes в разметке для элементов управления, поддерживающих режимы приложения.

Представление ленты позволяет задавать режимы для следующих элементов управления:

На платформе ленты эти элементы управления называются модальными элементами управления. Они отображаются только в том случае, если в пользовательском интерфейсе активен режим, к которому они привязаны.

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

При использовании атрибута ApplicationModes режимы назначаются модальным элементам управления в связи 1:N (один ко многим), где один модальный элемент управления может быть связан с несколькими режимами.

Платформа ленты относится к режимам с числовым значением от 0 до 31, при этом режим 0 считается режимом по умолчанию, который автоматически активируется при запуске приложения ленты. Любой модальный элемент управления, не указывающий атрибут ApplicationModes , считается членом режима по умолчанию.

В RibbonApp по умолчанию используется простой режим, при этом функция расширенного режима отображается только в том случае, если он инициирован пользователем.

В следующем примере показана разметка, необходимая для RibbonApp.

<Application.Views>
  <Ribbon>

    <!--Application Menu-->
    <Ribbon.ApplicationMenu>
      <ApplicationMenu CommandName='cmdAppMenu'>                    
        <MenuGroup>
          <Button CommandName='cmdSave'/>                        
          <Button CommandName='cmdExportMetadata' ApplicationModes='1'/>                   
        </MenuGroup>              
        <MenuGroup>
          <Button CommandName='cmdSwitchModes' ApplicationModes ='0,1'/>
          <Button CommandName='cmdExit'/>
        </MenuGroup>
      </ApplicationMenu>
    </Ribbon.ApplicationMenu>
            
    <!--Tabs-->
    <Ribbon.Tabs>
      <!--Home Tab-->
      <Tab CommandName='cmdHomeTab'>
                    
        <!--Scaling Policy for Home tab-->
        <Tab.ScalingPolicy>
          <ScalingPolicy>
            <ScalingPolicy.IdealSizes>
              <Scale Group='cmdSimpleControlsGroup' Size='Medium'/>                                
            </ScalingPolicy.IdealSizes>                     
          </ScalingPolicy>
        </Tab.ScalingPolicy>     
                    
        <!--Simple Controls Group-->
        <Group CommandName='cmdSimpleControlsGroup' SizeDefinition='ThreeButtons-OneBigAndTwoSmall'>                        
          <Button CommandName="cmdPaste" />
          <Button CommandName='cmdCut'/>                        
          <Button CommandName='cmdCopy'/>                        
        </Group>
      </Tab>
                
      <!--Advanced Tab-->
      <Tab CommandName='cmdAdvancedTab' ApplicationModes='1'>
        <!--Advanced Controls Group-->
        <Group CommandName='cmdMetadataGroup' ApplicationModes='1' SizeDefinition='TwoButtons'>
          <Button CommandName='cmdEditMetadata' />
          <Button CommandName='cmdCheckErrors' />
        </Group>
      </Tab>
    </Ribbon.Tabs>                   
                             
  </Ribbon>         
</Application.Views>

В этом примере показано следующее:

  • Режим по умолчанию 0 не требует явного объявления. Поскольку модальные элементы управления, не указывающие атрибут ApplicationModes , автоматически привязываются к режиму 0 (простой режим в примере RibbonApp), нет необходимости явно объявлять атрибут для модальных элементов управления по умолчанию.
  • Элементы управления можно привязать к нескольким режимам. Для RibbonApp единственным нужным атрибутом ApplicationModes в элементе управления Простой режим является cmdSwitchModes кнопка , так как она является частью режима Simple и Advanced . Если любой из режимов активен, этот элемент управления появится в меню приложения.
  • Модальные элементы управления не наследуются от своих родителей. Вкладка Дополнительно в RibbonApp содержит группу метаданных ; Оба модальных элемента управления назначены режиму 1 (расширенный режим). При назначении вкладки Дополнительно режиму 1 дочерние элементы управления, такие как группа метаданных , автоматически не назначаются режиму 1. Это позволяет независимо включать или отключать любую группу на вкладке во время выполнения.
  • Немодальные элементы управления по-прежнему могут полагаться на переключатели режима. Кнопки Изменить метаданные и Проверить наличие ошибок в RibbonApp предназначены для опытных пользователей и доступны только при переходе пользователя в расширенный режим. Элементы управления "Кнопка", не размещенные в меню приложения , являются немодальными; однако, поскольку эти кнопки размещаются в модальном элементе управления (группе метаданных ), они видны, когда группа видна. Таким образом, эти кнопки появляются, когда активируется расширенный режим и группа метаданных предоставляется в пользовательском интерфейсе ленты.

Переключение режимов во время выполнения

После определения режимов в разметке их можно легко включить или отключить в ответ на контекстные события. Как упоминалось ранее, приложения ленты всегда запускаются в режиме по умолчанию 0. После инициализации приложения и активного режима 0 набор активных режимов можно изменить, вызвав функцию IUIFramework::SetModes . Эта функция принимает 32-разрядное целое число в качестве побитового представления режимов, которые должны быть активными. Наименьший значимый бит представляет режим 0, а самый значительный бит — режим 31. Если бит имеет нулевое значение, режим не активен в пользовательском интерфейсе ленты.

В RibbonApp, когда пользователь включает расширенный режим, расширенные команды отображаются вместе с простыми командами. Обработчик команд для кнопки Переключиться в расширенный режим вызывает IUIFramework::SetModes , чтобы задать режимы 0 (Простой) и 1 (Расширенный) как активные в пользовательском интерфейсе. В следующем примере показан код RibbonApp для этого вызова функции :

const int SIMPLE_MODE = 0;
const int ADVANCED_MODE = 1;
pFramework->SetModes( UI_MAKEAPPMODE(SIMPLE_MODE) | UI_MAKEAPPMODE(ADVANCED_MODE) );

Примечание

Макрос платформы ленты UI_MAKEAPPMODE упрощает задачу правильной настройки этих битов при подготовке к вызову IUIFramework::SetModes.

 

В этом примере показано следующее:

  • Используйте макрос UI_MAKEAPPMODE для создания набора режимов.
  • Режимы задаются явно и атомарно. Целочисленное значение, передаваемое в IUIFramework::SetModes , представляет режимы, которые будут активны после возврата функции. Хотя простой режим был ранее активен, IUIFramework::SetModes должен указывать, что простой режим остается активным при активации расширенного режима.
  • Режим по умолчанию можно удалить. Хотя в RibbonApp режим по умолчанию (режим 0) никогда не удаляется, его можно удалить с помощью следующего вызова: g_pFramework->SetModes(UI_MAKEAPPMODE(ADVANCED_MODE)), предоставляя только расширенные команды в пользовательском интерфейсе.

Примечание

При перенастройке режимов приложения лента попытается сохранить ранее выбранную вкладку в пользовательском интерфейсе. Если новый набор режимов больше не содержит вкладку, выбранную перед вызовом, лента выберет вкладку в макете, ближайшем к меню приложения. Эта вкладка предназначена для размещения команд, наиболее важных для пользователя. Дополнительные сведения см. в разделе Руководство по взаимодействию с пользователем ленты.

 

Комментарии

На ленте всегда должен быть по крайней мере один активный режим. Если приложение пытается отключить все режимы путем вызова IUIFramework::SetModes со значением режима 0, возвращается E_FAIL, а набор активного режима остается неизменным.

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

Не все области пользовательского интерфейса ленты зависят от режимов приложения. Например, если отключение режима приводит к исчезновению кнопок на ленте, которые ранее были добавлены на панель быстрого доступа, эти кнопки остаются на панели быстрого доступа, позволяя пользователям выполнять команды, привязанные к кнопкам. Как правило, если команда принадлежит к одному или нескольким неактивным режимам, эта команда также должна быть отключена, задав свойству UI_PKEY_Enabled значение 0 (VARIANT_FALSE).

Руководство по взаимодействию с пользователем ленты

Отображение контекстных вкладок