Перенастройка ленты с помощью режимов приложения
Платформа ленты Windows поддерживает динамическую перенастройку и предоставление основных элементов пользовательского интерфейса ленты во время выполнения на основе состояния приложения (также называемого контекстом). Объявленные и связанные с определенными элементами в разметке различные состояния, поддерживаемые приложением, называются режимами приложения.
- Введение
- Контекстный пользовательский интерфейс
- Реализация режимов приложения
- Замечания
- Связанные темы
Введение
Режимы приложения состоят из логических групп элементов управления, которые предоставляют некоторые основные функциональные возможности приложения в пользовательском интерфейсе ленты. Эти режимы динамически включаются или отключаются приложением с помощью вызова метода платформы IUIFramework::SetModes, который включает или отключает видимость одного или нескольких режимов приложения.
Контекстный пользовательский интерфейс
Платформа ленты предоставляет широкие возможности для пользователей, включив динамические элементы управления, которые легко реагируют на взаимодействие с пользователем и контекст приложения. Этот полнофункциональный контекстный пользовательский интерфейс предоставляется с помощью сочетания следующих механизмов:
- Коллекции — элементы управления на основе коллекций, поддерживающие динамическое управление коллекциями элементов.
- Контекстные вкладки — вкладки ленты, видимость которых определяется изменением контекста рабочей области, например выбором изображения в документе.
- Режимы приложения — основные функциональные возможности приложения, зависящие от контекста приложения.
В некоторых отношениях режимы приложения функционально похожи на контекстные вкладки. Однако основное различие заключается в намерении и область каждого из них.
Контекстные элементы управления активируются в ответ на изменение контекста в приложении. Например, в Microsoft Paint для Windows 7 контекстная вкладка, содержащая группы текстовых команд, отображается, когда пользователь вставляет текстовую область в рабочую область. Эта контекстная вкладка не содержит основных команд для приложения и предоставляется только в пользовательском интерфейсе, так как контекст в приложении изменился. Основные функции приложения (команды редактирования изображений) по-прежнему актуальны и доступны для пользователя, даже если контекстная вкладка видна.
Режимы приложения отличаются от контекстных элементов управления тем, что они перенастраивать функциональные возможности в ответ на изменения в контексте, в который работает приложение. Режимы приложения находятся на более высоком уровне абстракции; они позволяют перенастроить основные функциональные возможности приложения, а не временно предоставлять функциональные возможности, которые не являются основным компонентом пользовательского интерфейса. Например, в Microsoft Paint для Windows 7 при вызове команды предварительного просмотра происходит переключение в режиме приложения. Когда Microsoft Paint переключается на предварительный просмотр, контекст, в который работает приложение, изменяется с редактирования на предварительный просмотр. В результате основные функциональные возможности приложения изменяются до тех пор, пока предварительный просмотр не будет отменен и приложение снова не перейдет в контекст редактирования.
Сценарий простого режима приложения
В следующем сценарии показано, как используются режимы приложения в приложении RibbonApp для предоставления дискретных аспектов основных функциональных возможностей.
В RibbonApp определены два режима приложения:
- Простой режим предоставляет базовые команды в пользовательском интерфейсе ленты. Эти команды отображаются всегда, независимо от того, какой режим приложения активен.
- Расширенный режим предоставляет сложные команды, предназначенные для опытных пользователей приложения. Эти расширенные команды отображаются в пользовательском интерфейсе ленты в дополнение к простым командам.
По умолчанию ribbonApp открыт в простом режиме, а команды, необходимые для начинающих пользователей, отображаются в меню приложения и на вкладке Главная . На следующих снимках экрана показано меню приложения RibbonApp и вкладка "Главная " в простом режиме, где выделены модальные элементы управления.
Хотя этих команд может быть достаточно для начинающих пользователей, RibbonApp также поддерживает опытных пользователей в расширенном режиме, который при активации путем нажатия кнопки Переключиться в расширенный режим в меню приложения отображает дополнительные основные функции.
Этот сценарий легко реализуется путем привязки различных элементов в разметке к дискретным режимам приложения, которые можно включать и выключать при необходимости. На следующих снимках экрана показано меню приложения RibbonApp и вкладка Главная в расширенном режиме, где выделены модальные элементы управления.
Реализация режимов приложения
В этом разделе описываются три шага, обычно необходимые для реализации режимов приложения платформы ленты. RibbonApp используется для предоставления примера для каждого шага.
Определение режимов
Каждый режим в приложении должен представлять логический набор функциональных возможностей, зависящий от контекста, в который может работать приложение. Например, если приложение отображает элементы управления, которые актуальны только при обнаружении сетевого подключения, эти элементы управления работают в контексте сети, который может оправдать создание сетевого режима.
RibbonApp имеет два контекста, которые могут быть активными в любой момент времени: простой и расширенный. Поэтому для RibbonApp требуется два режима: Простой и Расширенный.
Назначение элементов управления режимам приложения
После определения режимов приложения назначьте каждому элементу управления ленты режим, объявив атрибут ApplicationModes в разметке для элементов управления, поддерживающих режимы приложения.
Представление ленты позволяет задавать режимы для следующих элементов управления:
Основные элементы tab .
Группирование элементов, которые являются дочерними элементами основного элемента Tab .
Элементы Button, SplitButton и DropDownButton , назначенные menuGroup в меню приложения.
Примечание
Элементы Button, SplitButton и DropDownButton нельзя назначить режиму, если они не размещены в меню приложения.
На платформе ленты эти элементы управления называются модальными элементами управления. Они отображаются только в том случае, если в пользовательском интерфейсе активен режим, к которому они привязаны.
Элементы управления, содержащиеся в модальном элементе управления, наследуют поведение режима приложения. Например, если модальный элемент управления 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).
Связанные темы